2010-11-17 2 views
5

Я столкнулся с проблемой с аннотациями спящего режима. Для кода, показанного ниже, у меня есть класс отеля, класс клиентов, и я использую customerhotelbooking, чтобы отслеживать, какой клиент заказал тот отель и вице -versa. , но когда я помещаю аннотации на геттеры отеля и клиента, он дает исключение, и на удивление он работает, когда я помещаю его в атрибуты. может кто-нибудь сказать, почему это так ??Hibernate Аннотации не работают для геттеров, но работают для атрибутов

`Caused by: org.hibernate.MappingException: Could not determine type for: com.xebia.hotelBooking.domain.Customer, at table: CustomerHotelBooking, for columns: [org.hibernate.mapping.Column(customer)] 
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:290) 
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:274) 
at org.hibernate.mapping.Property.isValid(Property.java:217) 
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:464) 
at org.hibernate.mapping.RootClass.validate(RootClass.java:236) 
at org.hibernate.cfg.Configuration.validate(Configuration.java:1193) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1378) 
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954) 
at org.jboss.seam.persistence.HibernateSessionFactory.createSessionFactory(HibernateSessionFactory.java:165) 
at org.jboss.seam.persistence.HibernateSessionFactory.startup(HibernateSessionFactory.java:79) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) 
at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144) 
at org.jboss.seam.Component.callComponentMethod(Component.java:2249) 
at org.jboss.seam.Component.callCreateMethod(Component.java:2172) 
at org.jboss.seam.Component.newInstance(Component.java:2132)` 

У меня есть отель боб, как показано `

@Id 
@GeneratedValue 
private int id; 

private String description; 

private String city; 

private String name; 

private String rating ; 

private int isBooked; 
` 

Cusomer боб как`

 @Id 
@GeneratedValue 
private int id; 

private String userName; 

private String password; 

`

и CustomerHotelBooking класс, как

 @Id 
@GeneratedValue 
private int id; 

private Hotel hotel; 

private Customer customer; 


     @ManyToOne 
@Cascade(value = { CascadeType.ALL }) 
public Customer getCustomer() { 
    return customer; 
} 

/** 
    * @param customer the customer to set 
    */ 
public void setCustomer(Customer customer) { 
    this.customer = customer; 
} 

/** 
    * @return the user 
    */ 



/** 
    * @return the hotel 
    */ 
     @ManyToOne 
@Cascade(value = { CascadeType.ALL }) 
public Hotel getHotel() { 
    return hotel; 
} 

/** 
    * @param hotel 
    *   the hotel to set 
    */ 
public void setHotel(Hotel hotel) { 
    this.hotel = hotel; 
} 

ответ

6

The docs говорят:

2.2.2.2. Тип доступа

По умолчанию тип доступа иерархии классов определяется положением аннотаций @Id или @EmbeddedId. Если эти аннотации находятся в поле, то для сохранения сохраняются только поля и доступ к состоянию осуществляется через поле. Если на геттере присутствуют аннотации, то для сохранения сохраняются только геттеры, и доступ к состоянию осуществляется через геттер/сеттер. Это хорошо работает на практике и является рекомендуемым подходом.

Таким образом, ожидается и задокументированное поведение - поэтому поместите свои аннотации последовательно - поля или геттеры.

(Если вы читаете приведенную ниже документацию, в ней говорится, что существует способ смешивания типов доступа, используя аннотацию @Access, но я бы не рекомендовал это - быть последовательным. Я лично предпочитаю помещать аннотации на поля)

+0

спасибо Bozho ... получил вашу точку :) – Mann

+0

не может переместить мою аннотацию ID методу id getter ... –

Смежные вопросы