【发布时间】:2012-01-07 23:23:46
【问题描述】:
我有两个实体person 和Student,学生实体扩展了person 并有自己的标识符studentNumber。创建新学生时,我想自动生成两个识别号。
以下 sn-p 失败:person_id 为 NULL
@RooEntity(identifierColumn = "personID", inheritanceType = "SINGLE_TABLE")
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING, length = 20)
@DiscriminatorValue("P")
public class Person {
}
学生实体
@RooEntity
@DiscriminatorValue("S")
public class Student extends Person {
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "studentNumber")
private long studentNumber;
}
这里是我创建一个新学生并生成了学号但没有生成 personid 的地方?
private Student student;
/**
* @method Create a new student using our persistence model---Not Null variables
*/
public void CreateNewStudent(String firstName, String lastName, String telephone, Date birthday, GenderType gender){
student = new Student();
//set our variables and persist
student.setFirstName(firstName);
student.setLastName(lastName);
student.setTelephone(telephone);
student.setBirthDay(birthday);
student.setGender(gender);
student.persist();
}
}
有什么方法可以在创建学生时同时创建 studentNumber 和 personID?
【问题讨论】:
-
我质疑这个设计。为什么在使用单表继承时,父表和派生表都有主键?请显示您的架构。
-
学号并不是真正标识某条记录,它是一个代表学生身份的数字,person id应该是唯一的主键
-
嗯,有道理,请参阅下面的答案,了解解决问题的一种方法。
标签: java jpa persistence eclipselink auto-generate