我对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注释在这里做了什么。我想要的是,可以在没有用户实体的情况下将帐户添加到数据库表中,但是当添加用户时,所选帐户需要映射到数据库中,并且当检索用户时,用户的详细信息和必须检索其映射的帐户。但是当我们检索帐户时,用户不必是可视的。