如何在hibernate,Java中将已经可用的子实体添加到新的父实体

时间:2018-03-16 09:11:32

标签: java hibernate spring-data-jpa

我对hibernate非常陌生,因此我对OneToOne,OneToMany单向和双向映射感到困惑。

我有两个实体:用户和帐户(用户可以包含多个帐户)。我还有两个服务,一个用于添加帐户,另一个用于添加用户。现在我可以在没有用户的情况下添加帐户,因此Account表中的user_id列为null。现在,当客户想要添加用户时,他需要映射现有帐户。因此,他可以添加现有帐户,但帐户中的user_id列未更新,但仍为空。 这现在导致了一个问题。如果我想从数据库中检索用户,则不会为该用户检索帐户。我怀疑这个问题是由于user_id列为空。

我的用户实体:

@Entity
@Table(name = "QT_USER")
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "USER_ID")
    private long userId;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, targetEntity = Account.class)
    private Set<Account> accounts;

    // getter and setter methods
}

我的帐户实体:

@Entity
@Table(name = "QT_ACCOUNT")
public class Account implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ACCOUNT_ID")
    private long accountId;

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "USER_ID", nullable = true, updatable = false)
    private User user;

    //getter and setter methods
}

任何人都可以向我解释一下OneToMany和ManyToOne,JoinColumn注释在这里做了什么。我想要的是,可以在没有用户实体的情况下将帐户添加到数据库表中,但是当添加用户时,所选帐户需要映射到数据库中,并且当检索用户时,用户的详细信息和必须检索其映射的帐户。但是当我们检索帐户时,用户不必是可视的。

0 个答案:

没有答案