冬眠.一对一映射问题


@Entity
@Table(name="Customer")
public class Customer implements Serializable{
/**
 * This is my Customer entity object
 */
private static final long serialVersionUID = 9037154862690840147L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="Cust_Id")
private int customerId;
@Column(name="First_Name")
private String firstName;
@Column(name="Last_Name")
private String lastName;
@Column(name="Gender")
private String gender;
@Column(name="Email")
private String email;
@Column(name="Password")
private String password;
@Column(name="City")
private String city;
@Column(name="State")
private String state;
@Column(name="Country")
private String country;
@Column(name="Phone_No")
private String phoneNumber;
@Column (name="Zip_Code")
private int zipCode;
@Column(name="LAST_UPDATED_NM")
private String lastUpdatedName;
@Column(name="LAST_UPDATED_DTM")
private Date lastUpdatedTime;

@OneToOne(mappedBy = "customer", cascade = CascadeType.ALL)
private RoleOfUser roleOfUser;


This is my Role of user entity object
@Entity
@Table(name = "role_of_user")
public class RoleOfUser implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Role_Id")
private Integer roleId;
@Column(name = "Role_Name")
private String roleName;
@Column(name = "First_Name")
private String firstName;
@Column(name="Last_Name")
private String lastName;
@Column(name = "Created_NM")
private String createdName;
@Column(name = "Created_DTM")
private Date createdDate;
@Column(name = "Last_Update_NM")
private String lastUpdatedName;
@Column(name = "Last_Update_DTM")
private Date lastUpdatedDate;
@Column (name = "Status")
private String status;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Customer customer;

@Column(name = "Customer_Cust_Id")
@GeneratedValue(generator="gen")
@GenericGenerator(name="gen", strategy="foreign",  parameters =       @Parameter(name = "property", value = "customer"))
private Integer customerId;

客户实体表中的 customerId 必须是要在 RoleOfUser 表中Customer_cust_id的外键。我运行了上面的代码,它说Customer_cust_id不能为空。如何映射外键?Role_id已经是主键。

在我的持久性类中使用原语一直是我的烦恼,因为它可能会导致一些误导性错误,所以我会从将int customerId更改为Integer customerId开始。

接下来,听起来Customer应该是您的父表,RoleOfUser应该是子表。这里的问题是你说你的表是一对一的,但你没有加入RoleOfUser@Id列。

请考虑改为执行以下操作:

@Table(name = "CUSTOMER")
public class Customer {
    @Id
    @Column(name = "CUST_ID")
    private Integer customerId;
}
@Entity
@Table(name = "ROLE_OF_USER")
public class RoleOfUser {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ROLE_ID")
    private Integer roleId;
    @OneToOne
    @JoinColumn(name = "CUSTOMER_CUST_ID", referencedColumnName = "CUST_ID")
    private Customer customer
}

最后,如果这些表真的是一对一的,为什么不将它们变成一个包含更多列的更宽的表呢?或者,如果允许用户具有多个角色,则需要将该@OneToOne更改为@ManyToOne

最新更新