@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
。