2010-02-12 2 views
1

애스펙트를 사용하여 hibernate 주석 클래스에 매개 변수를 삽입하는 방법을 찾고있다. 내가Hibernate Annotation + AspectJ -> 애트리뷰트 이름 HQL의 pbs

을하고 있어요 경우 : 여기

@Entity 
public class User implements IHasCity { 

    @Id 
    private int id; 

    private String name; 

} 

public interface IHasCity { 

} 

는 측면은 내가 요청을하고자하는 사용자 이제

public aspect ACity { 

@Column 
private String IHasCity.cityName; 

private String IHasCity.getCityName(){ 
return this.cityName; 
} 

} 

에 기여 : 여기

는 사용자입니다 like :

"from User"result.getCityName()과 같은 문제가 없습니다.

내가 "사용자 위치 cityName =?" 작동하지 않습니다 ...

화면 흔들림 때문입니다. hibernate에서 "cityName"에 내 private String cityName을 연결하는 대신 class $ ajc $ intertype $ interface $ cityName과 같은 사용할 수없는 intertype 이름과 연결합니다.

이 문제를 해결할 방법이 있습니까? hql 속성 이름 연관 변경

대단히 감사합니다!

답변

1

IHasCity.cityName이라는 이름은 aspectj 바이트 코드 위버에 의해 ajc $ interField $ interface $ cityName과 같은 것으로 맹 글링 될 것입니다.

최대 절전 모드를 요청할 때 고려해야합니다. 난 당신이 그렇게 할 도우미를 만들 수있을 것 같아요 :

session.createQuery("from User u where u." + AspectHelper.mangle(ACity.class,IHasCity.class,"cityName") + "=:cityName").setParameter(":cityName",...etc). 

그들은 속임수를 방지 할 수있는 옵션을 제공하기 위해 AspectJ의에서 전략을 엉망으로 이름으로 찾고 있습니다. 그게 thread