1

私はプロジェクトに取り組んでおり、データベースとのやり取りに Hibernate を使用しています。

私は 2 つのテーブルを持っていRESOURCE_PROFILEますPROJECT_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_MASTERを使用しています。以下は、これら 2 つのテーブル用に作成したエンティティ クラスです。マッピングで何か間違ったことをしていると確信しています。助けて、正しい方向に向けてもらえますか? 複数の列に同じ外部キーが使用されているため、このマッピングを実現するにはどうすればよいですか?USER_ID(RESOURCE_PROFILE)PROJECT_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: PROJECT_MASTER (PROJECT_NAME, PROJECT_NUMBER, START_DATE, END_DATE, SUBMITTED_BY, SUBMITTED_DATE, UPDATED_BY) 値 (?, ?, ?, ?, ?, ?, ?) 2013 年 9 月 12 日 8:46:20 PM org.apache に挿入します。 catalina.core.StandardWrapperValveがSEVEREを呼び出します:サーブレットアクションのServlet.service()が例外をスローしました

java.sql.SQLException: Field 'PROJECT_MANAGER_ID' doesn't have a default value
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)

挿入クエリには、これらの 2 つの列さえありません。これがクエリのあり方です。

Hibernate: PROJECT_MASTER (PROJECT_NAME, PROJECT_NUMBER, START_DATE, END_DATE, PROJECT_MANAGET_ID , PROJECT_SUPERVISOR_ID , SUBMITTED_BY, SUBMITTED_DATE, UPDATED_BY) 値 (?, ?, ?, ?, ?, ?, ?,?,?) に挿入します。

4

1 に答える 1

1

でテーブルを作成しました

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、VARMITTED_BY (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_ID(USER_ID) )、外部キー (UPDATED_BY) REFERENCES USER_PROFILE(USER_ID) );

そして、クラスがこのテーブルを使用するようにしました。フィールドのデフォルト値がないためNOT NULL、Hibernate は不平を言います。その列をテーブルから削除するか、エンティティ マッピングに関係を追加してください。

への変更

@ManyToOne
@JoinColumn(name="PROJECT_MANAGER_ID ",insertable=false, updatable=false,
        nullable=false)
private UserProfileBean projectManagerID;
于 2013-09-12T18:45:30.337 に答える