Java 定义映射时发生Hibernate异常
我正在做一个项目,并使用Hibernate进行数据库交互 我有两个表,一个是Java 定义映射时发生Hibernate异常,java,hibernate,hibernate-mapping,fluent-nhibernate-mapping,Java,Hibernate,Hibernate Mapping,Fluent Nhibernate Mapping,我正在做一个项目,并使用Hibernate进行数据库交互 我有两个表,一个是RESOURCE\u PROFILE,第二个是PROJECT\u MASTER。下面是DDL语句 CREATE TABLE USER_PROFILE ( FIRST_NAME VARCHAR(15) NOT NULL, MIDDLE_NAME VARCHAR(15), LAST_NAME VARCHAR(15) NOT NULL, EMAIL_ID VARCHAR(40) NOT NULL
RESOURCE\u PROFILE
,第二个是PROJECT\u MASTER
。下面是DDL语句
CREATE TABLE USER_PROFILE (
FIRST_NAME VARCHAR(15) NOT NULL,
MIDDLE_NAME VARCHAR(15),
LAST_NAME VARCHAR(15) NOT NULL,
EMAIL_ID VARCHAR(40) NOT NULL,
USER_ID VARCHAR(40) NOT NULL,
PASSWORD VARCHAR(1000) NOT NULL,
ROLE VARCHAR(20),
SUPERVISOR_ID VARCHAR(20),
SUBMITTED_BY VARCHAR(20),
SUBMITTED_DATE DATE,
PRIMARY KEY (USER_ID)
);
CREATE TABLE PROJECT_MASTER (
PROJECT_ID INT NOT NULL AUTO_INCREMENT,
PROJECT_NAME VARCHAR(50) NOT NULL,
PROJECT_NUMBER VARCHAR(50) NOT NULL,
START_DATE DATE,
END_DATE DATE,
PROJECT_MANAGER_ID VARCHAR(40) NOT NULL,
PROJECT_SUPERVISOR_ID VARCHAR(40) NOT NULL,
SUBMITTED_BY VARCHAR(40),
SUBMITTED_DATE DATE,
UPDATED_BY VARCHAR(40),
PRIMARY KEY (PROJECT_ID),
FOREIGN KEY (PROJECT_MANAGER_ID) REFERENCES USER_PROFILE(USER_ID),
FOREIGN KEY (PROJECT_SUPERVISOR_ID) REFERENCES USER_PROFILE(USER_ID),
FOREIGN KEY (SUBMITTED_BY) REFERENCES USER_PROFILE(USER_ID),
FOREIGN KEY (UPDATED_BY) REFERENCES USER_PROFILE(USER_ID)
);
正如您在PROJECT\u MASTER
表中所看到的,我正在使用USER\u ID(RESOURCE\u PROFILE)
作为PROJECT\u MASTER
表中多列的外键。下面是我为这两个表创建的实体类。我确信我在地图绘制中出错了,你能帮我指出正确的方向吗?
由于我在多个列中使用了相同的外键,如何实现这种映射
@Entity
@Table(name = "PROJECT_MASTER")
public class ProjectMasterBean {
@Id
@GeneratedValue
@Column(name="PROJECT_ID")
private int projectID;
@Column(name="PROJECT_NAME")
private String projectName;
@Column(name="PROJECT_NUMBER")
private String projectNumber;
@Column(name="START_DATE")
private Date startDate;
@Column(name="END_DATE")
private Date endDate;
@ManyToOne
@JoinColumn(name="USER_ID",insertable=false, updatable=false,
nullable=false)
private UserProfileBean projectManagerID;
@ManyToOne
@JoinColumn(name="USER_ID",insertable=false, updatable=false,
nullable=false)
private UserProfileBean projectSupervisorID;
@ManyToOne
@JoinColumn(name="USER_ID",insertable=false, updatable=false,
nullable=false)
private UserProfileBean submittedBy;
}
@Column(name="SUBMITTED_DATE")
private Date submittedDate;
@ManyToOne
@JoinColumn(name="USER_ID",insertable=false, updatable=false,
nullable=false)
private UserProfileBean updatedBy;
public class UserProfileBean {
@Id
@Column(name="USER_ID")
private String userID;
@Column(name="FIRST_NAME")
private String firstName;
@Column(name="MIDDLE_NAME")
private String middleName;
@Column(name="LAST_NAME")
private String lastName;
@Column(name="EMAIL_ID")
private String emailID;
@Column(name="PASSWORD")
private String password;
@Column(name="ROLE")
private String userRole;
@Column(name="SUPERVISOR_ID")
private String supervisorID;
@Column(name="SUBMITTED_BY")
private String submittedBy;
@Column(name="SUBMITTED_DATE")
private String submittedDate;
}
这是我得到的一个例外:
Hibernate:插入项目主控(项目名称、项目编号、开始日期、结束日期、提交人、提交人、更新人)值(?,,,,,,,,?)
2013年9月12日晚上8:46:20 org.apache.catalina.core.StandardWrapper
严重:Servlet操作的Servlet.service()引发异常
Insert查询甚至没有这两列。查询应该是这样的
Hibernate:插入项目主控(项目名称、项目编号、开始日期、结束日期、项目经理ID、项目主管ID、提交人、提交人、更新人)值(?、、、、、、、、、?)
您已使用创建了表 创建表PROJECT\u MASTER(PROJECT\u ID INT非空自动增量, 项目名称VARCHAR(50)不为空,项目编号VARCHAR(50)不为空 NULL,开始日期,结束日期,项目经理ID VARCHAR(40) 非空,项目主管ID VARCHAR(40)非空,提交人 VARCHAR(40),提交日期,由VARCHAR(40)更新,主键 (项目ID),外键(项目经理ID)引用 用户配置文件(用户ID),外键(项目主管ID)参考 用户配置文件(用户ID)、外键(提交人)引用 用户配置文件(用户ID),外键(通过更新)引用 用户配置文件(用户ID)) 你让你的班级使用这个表格。因为您没有
notnull
字段的默认值,Hibernate会抱怨。从表中删除该列或在实体映射中添加关系
改为
@ManyToOne
@JoinColumn(name="PROJECT_MANAGER_ID ",insertable=false, updatable=false,
nullable=false)
private UserProfileBean projectManagerID;
您已使用创建了表 创建表PROJECT\u MASTER(PROJECT\u ID INT非空自动增量, 项目名称VARCHAR(50)不为空,项目编号VARCHAR(50)不为空 NULL,开始日期,结束日期,项目经理ID VARCHAR(40) 非空,项目主管ID VARCHAR(40)非空,提交人 VARCHAR(40),提交日期,由VARCHAR(40)更新,主键 (项目ID),外键(项目经理ID)引用 用户配置文件(用户ID),外键(项目主管ID)参考 用户配置文件(用户ID)、外键(提交人)引用 用户配置文件(用户ID),外键(通过更新)引用 用户配置文件(用户ID)) 你让你的班级使用这个表格。因为您没有
notnull
字段的默认值,Hibernate会抱怨。从表中删除该列或在实体映射中添加关系
改为
@ManyToOne
@JoinColumn(name="PROJECT_MANAGER_ID ",insertable=false, updatable=false,
nullable=false)
private UserProfileBean projectManagerID;
我想在表中包含这些列,并且我需要在该表中存储项目经理和项目主管的用户ID(来自资源表)。这就是问题所在,如何或如何在实体类中添加关系。@user2773890忽略了这一点。添加了一个编辑。
@JoinColumn
上的name
属性是当前表中充当外键的列的名称。使用PROJECT\u MANAGER\u ID
。即使我添加了“PROJECT\u MANAGER\u ID”,hibernate如何知道它需要添加另一个表的用户ID?@user2773890您必须对引用其他实体的所有列执行相同的操作。Hibernate有默认值。它将检查字段的类型,例如UserProfileBean
。然后它将查看该类,看看它是否是一个@实体
,并映射到它的@Id
字段,然后它可以知道由于@Column
注释,该字段被映射到用户Id
表中项目经理和项目主管的关系。这就是问题所在,如何或如何在实体类中添加关系。@user2773890忽略了这一点。添加了一个编辑。@JoinColumn
上的name
属性是当前表中充当外键的列的名称。使用PROJECT\u MANAGER\u ID
。即使我添加了“PROJECT\u MANAGER\u ID”,hibernate如何知道它需要添加另一个表的用户ID?@user2773890您必须对引用其他实体的所有列执行相同的操作。Hibernate有默认值。它将检查字段的类型,例如UserProfileBean
。然后,它将查看该类,看看它是否是一个@实体
,并映射到它的@Id
字段,然后它可以知道由于@列
注释,该字段被映射到用户Id
。