Java hibernate4:外键引用的列数错误。应该是2
我试图使用Hibernate注释为我的数据库表编写一个模型类 我有两个表,每个表都有一个主键Java hibernate4:外键引用的列数错误。应该是2,java,hibernate,jpa,hibernate-mapping,hibernate-annotations,Java,Hibernate,Jpa,Hibernate Mapping,Hibernate Annotations,我试图使用Hibernate注释为我的数据库表编写一个模型类 我有两个表,每个表都有一个主键User和ChartDetails package com.winnow.springservice.domain; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persis
User
和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;
}
}
图表详情
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;
}
我还有一个表-chartstarredby
,它将userId
和chart\u id
作为上述两个表的外键
但我无法找到如何在图表tarredby
表中引用这些约束
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;
}
}
请帮我做到这一点?提前感谢。首先,您应该为用户表创建一个作为主键的整数id。在代码中,您可以将其创建为字符串类型。 你在这里做错了
@ManyToOne
@JoinColumn(name = "FK_chart_id4")
private ChartDetails chart_details;
@ManyToOne
@JoinColumn(name = "FK_user_id4")
private User user;
用户表和图表详细信息表中的ID为
@Id
@Column(name="user_id")
public String user_Id;
AND
@Id
@Column(name="chart_id")
public int chartId;
因此,当您引用另一个类的id时,应该在@JoinColumn中给出该id的名称。就这样
@ManyToOne
@JoinColumn(name = "chartId")
private ChartDetails chart_details;
@ManyToOne
@JoinColumn(name = "user_Id")
private User user;
@ManyToOne
@ForeignKey(name = "user_Id")
private User user;
您还可以像这样使用Hibernate中的@ForeignKey(name=“user\u Id”)注释
@ManyToOne
@JoinColumn(name = "chartId")
private ChartDetails chart_details;
@ManyToOne
@JoinColumn(name = "user_Id")
private User user;
@ManyToOne
@ForeignKey(name = "user_Id")
private User user;
示例教程:-请在此处发布之前缩减源代码。不要用自动生成的JavaDoc让我们厌烦。使用一致的缩进,以便源代码高亮显示可以工作。所有这些都是对你希望得到帮助的人的礼貌。你问题的标题是什么意思?您收到的是错误消息吗?我在你的代码中看不到任何“Hibernate注释”——它们都是标准的JPA。