Я пытаюсь запустить Hibernate 4 (поставляется с JBoss AS 7) и развернуть мое приложение как EAR (persistence.xml iis в META-INF EAR). Hibernate, кажется, работает. У меня есть два класса, и он не жалуется, пока я не использую один класс внутри другого.
У меня есть сеанс:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "sessions")
public class Session {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
public Long dbid;
public String id;
public User user; // This is problematic!
public Session() {
}
public Session(User user) {
this.id = generateID();
this.user = user;
}
private String generateID() {
return Long.toString((long) (Math.random() * 1000000000.0));
}
@Override
public int hashCode() { [...] }
@Override
public boolean equals(Object obj) { [...] }
}
А у меня есть пользователь
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
public Long dbid;
public String name;
public String password;
public User() {
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
@Override
public int hashCode() { [...] }
@Override
public boolean equals(Object obj) { [...] }
}
Если я запускаю сервер, он жалуется:
Caused by: org.hibernate.MappingException: Could not determine type for: myproject.model.User, at table: sessions, for columns: [org.hibernate.mapping.Column(user)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:303)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:287)
at org.hibernate.mapping.Property.isValid(Property.java:215)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:466)
at org.hibernate.mapping.RootClass.validate(RootClass.java:267)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1285)
Не жалуется, если я удаляю public User user;
из класса сеанса.
Оба класса перечислены в persistence.xml
, и я попробовал:
- генерирует геттеры / сеттеры и помещает аннотации в геттеры
- генерирует hashCode и равняется соответственно
Что я мог проверить дополнительно? В чем может быть проблема?