我在使用Hibernate + JPA的项目中工作。我有这个实体类:
@Entity
public class CafeUser implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer userId;
@Column
private String userName;
@Column
private String userPassword;
@Column(unique=true)
private String userEmail;
@Column
private String userAddress;
@Column
private String userCountry;
@Column
private String userState;
@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
private DateTime userDateOfBirth;
@Column
private String userSex;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="userAccountingDetailsId", referencedColumnName="userAccountingDetailsId")
private AccountingDetails accountingDetails;
@OneToOne(cascade=CascadeType.ALL)
private InvestorProfile investorProfile;
@OneToMany(mappedBy="user")
private Set<UserProfileAnswer> userProfileAnswers;
@OneToMany(cascade=CascadeType.ALL, mappedBy="user")
private Set<MoneyHealth> userMoneyHealths;
@OneToMany(cascade=CascadeType.ALL, mappedBy="user")
private Set<LifePlanning> lifePlannings;
getters-setters
}
如果可以看到,字段userEmail被声明为唯一,如果DB中存在CafeUser实体的副本,则它不会插入实体。 但是,即使与已经在数据库中注册了电子邮件的用户相关联,也会插入“investorProfile”和“accountingDetails”字段。
我做错了什么?
提前致谢!
答案 0 :(得分:0)
将hibernate属性hibernate.show_sql
设置为true,并查看生成的SQL语句。还要检查你是否在事务中执行持久性。
答案 1 :(得分:0)
解决。我误解了@OneToOne关系。现在,investorProfile和AccountingDetails为一个用户保留了一个密钥,并且全部设置完毕。