chargedfever
chargedfever

Reputation: 55

Hibernate. OneToOne mapping problems

@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 from customer entity table need to be a foreign key to Customer_cust_id in RoleOfUser table. i ran the above code and it says Customer_cust_id cannot be null. How do i map foreign keys? Role_id is already a primary key.

Upvotes: 0

Views: 324

Answers (1)

Dean Clark
Dean Clark

Reputation: 3878

Using primitives in my persistence classes has always been a pet peeve of mine because it can lead to some misleading errors, so I'd start with changing int customerId to Integer customerId.

Next, it sounds like Customer should be your parent table and RoleOfUser should be the child. The problem here is that you are saying your tables are one-to-one, but you don't then join on the @Id column of RoleOfUser.

Consider doing something like this instead:

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

Finally, though, if these tables are truly one-to-one, why not just make them one wider table with more columns? Or if a user is allowed to have multiple roles, then you'll want to change that @OneToOne to be an @ManyToOne.

Upvotes: 1

Related Questions