Как решить org.hibernate.MappingException? - PullRequest
1 голос
/ 18 ноября 2011

Я пытаюсь запустить 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, и я попробовал:

  1. генерирует геттеры / сеттеры и помещает аннотации в геттеры
  2. генерирует hashCode и равняется соответственно

Что я мог проверить дополнительно? В чем может быть проблема?

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

Добавьте аннотацию @ManyToOne к члену User в вашем классе сеанса (при условии, что у одного пользователя может быть несколько сеансов в вашей базе данных ... если у пользователя только один сеанс, вы можете использовать @OneToOne

1 голос
/ 18 ноября 2011

Выдает ошибку, поскольку вы не предоставили никакого сопоставления для свойства User. Попробуйте изменить код, как показано ниже.

@OneToOne
public User user

См. здесь для примера о@OneToOne отображение в спящем режиме с использованием аннотации здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...