私はプロジェクトに取り組んでおり、データベースとのやり取りに 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) 値 (?, ?, ?, ?, ?, ?, ?,?,?) に挿入します。