채우기 Admin 및 AdminHealthPlan 테이블을 생성하려고합니다.jpa 1 대 다수의 관계가 예외를 허용하지 못함
두 사람 사이의 관계는 일대일 (1 명의 관리자는 많은 건강 계획을 소유 할 수 있음)입니다. 다음과 같이
은 Admin
클래스는 정의 다음과 같이
@Entity
@Table(name = "admin")
@NamedQueries(value = {
@NamedQuery(name = "admin.getAdminById", query = "SELECT a "
+ "from Admin a WHERE a.id=:id and deleted = 0"),
@NamedQuery(name = "admin.getAdminByEmail", query = "SELECT a "
+ "from Admin a where a.email = :email and deleted = 0") })
public class Admin extends Persistent {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "phone")
private String phone;
@OneToOne(mappedBy = "admin", fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private AdminRole role;
@OneToOne(mappedBy = "admin", fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private AdminPasswordToken passwordToken;
@OneToMany(mappedBy = "admin", fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private Set<AdminHealthPlan> healthPlans;
@Column(name = "deleted")
private Boolean deleted = false;
@Column(name = "security_question")
private Integer securityQuestion;
@Column(name = "security_answer")
private String securityAnswer;
public Admin() {}
// Getters/setters
}
AdminHealthPlan
클래스를 정의했다.
@Entity
@Table(name = "admin_health_plan")
public class AdminHealthPlan implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "health_plan")
private String healthPlan;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "admin_id", nullable = false)
private Admin admin;
@Column(name = "deleted")
private Boolean deleted = false;
public AdminHealthPlan() {}
public AdminHealthPlan(String healthPlan) {
this.healthPlan = healthPlan;
}
// Getters/setters
}
내가 요청에서 값을 검색하고 관리 건강 보험 설정 객체를 생성 및 관리 객체를 설정하고 마지막으로 DB에 저장하는 객체를 전송하기 위해 유사하게 관리 객체로 설정에 의해 관리자 개체를 만듭니다. 관리자 및 AdminHealthPlan 객체를 생성하기위한
May 21, 2012 6:49:16 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet appServlet threw exception
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'admin_id' cannot be null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2648)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2362)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2280)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2265)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy70.executeUpdate(Unknown Source)
WS
를 다음과 같이 예외를주고있다
:
private Admin createAdminDummyObject() {
Admin admin = new Admin();
admin.setFirstName("Zuned");
admin.setLastName("Ahmed");
admin.setEmail("[email protected]");
admin.setPhone("123-1234454");
admin.setHealthPlans(getHealthPlans(admin));
return admin;
}
private Set<AdminHealthPlan> getHealthPlans(Admin admin) {
Set<AdminHealthPlan> adminAHP = new HashSet<AdminHealthPlan>();
AdminHealthPlan ahp = new AdminHealthPlan();
ahp.setAdmin(admin);
ahp.setHealthPlan("Plan1");
adminAHP.add(ahp);
return adminAHP;
}
내가
getJpaTemplate().persist(t);
사용은 DB에 유지됩니다.
어떤 몸이라도 무엇이 놓치고 있는지 알려주실 수 있습니까?
답장 문제는 4 번 점입니다. –