使用JPA-Annotations进行Hibernate映射:无法确定类型

时间:2011-06-08 19:36:24

标签: java hibernate jpa mapping persistence

我最近开始使用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和我能够幸福吗? :)

谢谢!

2 个答案:

答案 0 :(得分:4)

我猜这是因为你在字段和属性上混合了注释。您需要以一致的方式放置注释,除非您使用@Access / @AccessType明确说明它们的放置方式。

答案 1 :(得分:1)

当它说它不知道实体时,通常意味着它没有找到它(如果你正在使用扫描)或者你忘了列出它。如果您使用的是JPA,通常会在persistence.xml中列出实体(位于META-INF文件夹中)。