@OneToOne关系hibernate的问题

时间:2011-04-07 13:56:30

标签: hibernate jpa one-to-one

我在使用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”字段。

我做错了什么?

提前致谢!

2 个答案:

答案 0 :(得分:0)

将hibernate属性hibernate.show_sql设置为true,并查看生成的SQL语句。还要检查你是否在事务中执行持久性。

答案 1 :(得分:0)

解决。我误解了@OneToOne关系。现在,investorProfile和AccountingDetails为一个用户保留了一个密钥,并且全部设置完毕。