我最近开始使用Hibernate(和JPA Annotations)进行持久化的第一个Java项目。
我有以下课程:
用户类
*some imports*
@Entity
public class Owner {
private int id;
private String name;
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id")
private Pet pet;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setPet(Pet pet) {
this.pet = pet;
}
public Pet getPet() {
return pet;
}
}
宠物等级
*some imports*
@Entity
public class Pet {
private String name;
@Id
@GeneratedValue
private int id;
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
每当我尝试保存对象时,Hibernate都会给出以下错误输出。
Exception in thread "main" org.hibernate.MappingException: Could not determine type for: Pet, at table: Owner, for columns: [org.hibernate.mapping.Column(pet)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:306)
at org.hibernate.mapping.Column.getSqlTypeCode(Column.java:164)
我错过了什么?我无法弄清楚如何进行PF-FK映射。
我是否需要告诉Hibernate Pet映射到哪个表格,或者它是否足够聪明?有人可以建议我如何改变我对Pet ivar的声明,以便Hibernate和我能够幸福吗? :)
谢谢!
答案 0 :(得分:4)
我猜这是因为你在字段和属性上混合了注释。您需要以一致的方式放置注释,除非您使用@Access
/ @AccessType
明确说明它们的放置方式。
答案 1 :(得分:1)
当它说它不知道实体时,通常意味着它没有找到它(如果你正在使用扫描)或者你忘了列出它。如果您使用的是JPA,通常会在persistence.xml中列出实体(位于META-INF文件夹中)。