Отображение гибернации с JPA-аннотациями: не удалось определить тип - PullRequest
0 голосов
/ 08 июня 2011

Я недавно начал свой первый Java-проект, который использует Hibernate (и аннотации JPA) для персистентности.

У меня есть следующие классы:

Класс пользователя

*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 ivar, чтобы Hibernate и я могли быть счастливы? :)

Спасибо!

Ответы [ 2 ]

4 голосов
/ 08 июня 2011

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

1 голос
/ 08 июня 2011

Когда он говорит, что не знает сущность, это обычно означает, что он либо не нашел ее (если вы используете сканирование), либо вы забыли перечислить ее.Если вы используете JPA, обычно вы будете перечислять сущности в файле persistence.xml (который находится в папке META-INF).

...