Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定义映射时发生Hibernate异常_Java_Hibernate_Hibernate Mapping_Fluent Nhibernate Mapping - Fatal编程技术网

Java 定义映射时发生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

我正在做一个项目,并使用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,
    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