JPA / Hibernate OneToOne Null во внешнем ключе - PullRequest
6 голосов
/ 17 июня 2011

У меня есть следующие два объекта с двунаправленным реляционным отображением OneToOne, доступ к данным обеспечивается Hibernate EntityManager v. "3.5.1-Final".

@Entity
@Table(name = "details")
public class Details {
    private Long id;
    private User user;

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

    @OneToOne  
    @JoinColumn(name="user_id") 
    public User getUser() {
        return user;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Long getId() {
        return id;
    }

    private void setId(Long id) {
        this.id = id;
    }
}

И

@Entity
@Table(name = "users")
public class User {
private Long id;
private Details details;

public void setDetails(Details details) {
    this.details = details;
}

@OneToOne(mappedBy="user",cascade=CascadeType.ALL)  
public Details getDetails() {
    return details;
}
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Long getId() {
        return id;
    }

    private void setId(Long id) {
        this.id = id;
    }
}

Код персистенции:

User user = new User();
Details details = new Details();
user.setDetails(details);

entityManager.persist(user);

Данные затем корректно вставляются в обе таблицы, проблема в том, что FK в таблице подробностей "user_id" получает значение NULL, но не уверен, чего здесь не хватает.

1 Ответ

11 голосов
/ 17 июня 2011

необходимо добавить details.setUser(user).

user.setDetails(details); только установить внешний ключ в сущности User.@OneToOne только сообщает hibernate, как интерпретировать возвращаемые данные (и как получить - используя объединения).Он не сообщает Hibernate, какие внешние ключи устанавливать.

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