Hibernate - 使用onetomany对象更新父对象

时间:2018-03-13 16:45:12

标签: hibernate merge one-to-many

让我们考虑拥有这样的三个DTO。

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", unique = true, nullable = true)
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "user_id", nullable=false)
    private Set<UserElement> userElements;
}

@Entity
@Table(name = "element")
public class Element {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", unique = true, nullable = true)
    private Long id;
}

@Entity
@Table(name = "user_element")
public class UserElement {

    public UserElement (User user, Element element) {
        this.user = user;
        this.element = element;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", unique = true, nullable = true)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", updatable = false, insertable = false, nullable=false)
    private User user;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "element_id")
    private Element element;
}

我们假设在表user_element的数据库中我当前有一行:user_id = 1,element_id = 1;

给定代码:

List<UserElement> userElements = Lists.newArrayList();
User user = session.get(User.class, 1);
Element element1 = session.get(Element.class, 1);
Element element2 = session.get(Element.class, 2);
userElements.add(new UserElement(user, element1));
userElements.add(new UserElement(user, element2));

user.setUserElements(userElements);
session.merge(user);

我原本希望在我的桌子中有两行: user_id = 1,element_id = 1,user_id = 1,element_id = 2, 但相反,我得到了ConstraintViolationException。我究竟做错了什么?我不能简单地提供userElements的集合吗?

0 个答案:

没有答案