Reputation: 43
I am trying to use Hibernate annotations for writing a model class for my database tables.
I have two tables each having a primary key User
and ChartDetails
.
package com.winnow.springservice.domain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
//User Entity class mapped with hibernate
@Entity
@Table(name="User")
@SuppressWarnings(value = { "all" })
public class User implements Serializable
{
@Id
@Column(name="user_id")
public String user_Id;
@Column(name="user_name")
public String userName;
public String password;
@Column(name="last_login")
public String last_Login;
@Column(name="role_id")
public int role_Id;
public int status;
public String getUser_Id() {
return user_Id;
}
public void setUser_Id(String user_Id) {
this.user_Id = user_Id;
}
public String getLast_Login() {
return last_Login;
}
public void setLast_Login(String last_Login) {
this.last_Login = last_Login;
}
public int getRole_Id() {
return role_Id;
}
public void setRole_Id(int role_Id) {
this.role_Id = role_Id;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
System.out.println("username"+userName);
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password)
{
System.out.println("password "+password);
this.password = password;
}
}
Chart details
package com.winnow.springservice.domain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="Chart_Details")
@SuppressWarnings(value = { "all" })
public class ChartDetails implements Serializable
{
@Id
@Column(name="chart_id")
public int chartId;
@Id
@Column(name="chart_type_id")
public int chartTypeId;
@Column(name="chart_name")
public String chartName;
@Column(name="x_axis")
public String x_axis;
@Column(name="y_axis")
public String y_axis;
@Column(name="z_axis")
public int z_axis;
@Column(name="chart_filter_id")
public int chartFilterId;
@Column(name="is_data_table")
public boolean isDataTable;
@Column(name="dataset_id")
public int datasetId;
@Column(name="user_id")
public int userId;
@Column(name="project_id")
public int projectId;
}
And I have one more table – ChartsStarredBy
– which has userId
and chart_id
as foreign keys from the above two tables.
But I am unable to find how I can reference these constraints in the ChartsStarredBy
table.
package com.winnow.springservice.domain;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name="Chart_Starred_By")
@SuppressWarnings(value = { "all" })
public class ChartsStarredBy implements Serializable
{
@Id
public int id;
@Temporal(TemporalType.DATE)
public Date starred_date;
@ManyToOne
@JoinColumn(name = "FK_chart_id4")
private ChartDetails chart_details;
@ManyToOne
@JoinColumn(name = "FK_user_id4")
private User user;
public Date getStarred_date()
{
return starred_date;
}
public void setStarred_date(Date starred_date)
{
this.starred_date = starred_date;
}
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
public ChartDetails getChart_details() {
return chart_details;
}
public void setChart_details(ChartDetails chart_details) {
this.chart_details = chart_details;
}
}
Please help me achieve this? Thanks in advance.
Upvotes: -1
Views: 7002
Reputation: 2807
First of all you should create an integer id for User table which is primary key. Here in your code you creating it as String type.
You are doing wrong here
@ManyToOne
@JoinColumn(name = "FK_chart_id4")
private ChartDetails chart_details;
@ManyToOne
@JoinColumn(name = "FK_user_id4")
private User user;
You have IDs in User table & ChartDetails table as
@Id
@Column(name="user_id")
public String user_Id;
AND
@Id
@Column(name="chart_id")
public int chartId;
So when you refer to id of another class you should give name of that id in @JoinColumn. Just like this
@ManyToOne
@JoinColumn(name = "chartId")
private ChartDetails chart_details;
@ManyToOne
@JoinColumn(name = "user_Id")
private User user;
You can also use @ForeignKey(name = "user_Id") annotation from Hibernate like this
@ManyToOne
@ForeignKey(name = "user_Id")
private User user;
Example tutorial :- Hibernate One To Many Annotation Tutorial
Upvotes: 0