OneToOne Mapping - игровая платформа - PullRequest
2 голосов
/ 19 декабря 2011

Я изо всех сил пытаюсь успешно реализовать сопоставление OneToOne в моем приложении Play Framework.

примеры, которые у меня есть:

@Entity
  public class Profile extends GenericModel {
  @Id
  @GeneratedValue(generator = "foreignGenerator")
  @GenericGenerator(name = "foreignGenerator", strategy = "foreign", 
            parameters = @Parameter(name = "property", value = "user"))
  public static int id;

  @OneToOne(mappedBy="profile",  cascade = {CascadeType.ALL})
  public static User user;
}

и:

@Entity
  public class User extends Model {

  @Required
  public String firstName;

  @Required
  public String surname;
 }

в этой настройке выдает:

org.hibernate.AnnotationException: не указан идентификатор для объекта: models.Profile

РЕДАКТИРОВАТЬ : Согласно ответу Кристиана Боариу , я изменил профиль в соответствии с тем, что вы предложили, и пользователь:

    @Entity
  public class User extends GenericModel {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long user_id;

@Required
public String firstName;

@Required
public String surname;

@OneToOne(cascade = {CascadeType.ALL})
@PrimaryKeyJoinColumn(name = "user_id", referencedColumnName = "profile_id")
public Profile profile;

public Profile getProfile() {
    return profile;
}

public void setProfile(Profile profile) {
    this.profile = profile;
}   
 }

Также добавлен геттер / сеттер в профиль:

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

Но я сейчас получаю hibernate.id.IdentifierGenerationException: null id generated for:class models.Profile .. не знаете, как исправить?

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Проблема в определении вашего идентификатора.

Это должно не быть static.

Кроме того, пользователь также не должен быть статичным.

ОБНОВЛЕНИЕ :

Итак, ваш класс должен быть таким:

  @Entity
  public class Profile extends GenericModel {
  @Id
  @GeneratedValue(generator = "foreignGenerator")
  @GenericGenerator(name = "foreignGenerator", strategy = "foreign", 
            parameters = @Parameter(name = "property", value = "user"))
  public int id;

  @OneToOne(mappedBy="profile",  cascade = {CascadeType.ALL})
  public User user;
}
0 голосов
/ 20 декабря 2011

Fixed.предложения, как указано выше, исправили проблему @OneToOne и hibernate.id.IdentifierGenerationException: нулевой идентификатор, сгенерированный для: class models.Profile, был вызван попыткой сохранить сущность с нулевым идентификатором - из-за использования @primaryKeyJoin, поэтому изменен на @JoinColumn

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