- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个实体person
和Student
,student实体扩展了person并且有自己的标识符studentNumber
。创建新学生时,我想自动生成两个标识号。
以下代码片段失败并显示:person_id is 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
提供一个主键标识符,为 Student
提供一个唯一标识符。请注意,在您当前的设置下,只能自动生成其中一个键(许多 DBMS 只允许每个表自动递增一列)。因此,我建议您首先为 Person
定义主键列:
@Entity
@Table(name="person")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE", discriminatorType=DiscriminatorType.STRING,length=20)
@DiscriminatorValue("P")
public class Person {
@Basic
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="personId")
private Long id;
}
请注意,在您的数据库中,您将希望将 personId 列作为自动增量。然后为您的学生编号定义单独的生成值注释。我下面显示的示例使用表生成器,但您可以执行任何您想要的操作:
@Entity
@DiscriminatorValue("S")
public class Student extends Person {
@Basic
@TableGenerator(name="ID_GEN", table="identifier_table", pkColumnName="seq_name",
valueColumnName="seq_count", pkColumnValue="student_seq")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "ID_GEN")
@Column(name = "studentNumber")
private Long studentNumber;
}
下面是您需要支持学生序列号生成的表的 DDL,如上面的示例所示:
create table identifier_table (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
seq_name VARCHAR(255) NOT NULL,
seq_count INT NOT NULL DEFAULT 0
);
您最初会用以下内容填充它:
insert into identifier_table (seq_name, seq_count) VALUES ('student_seq', 0);
当然,更简单的解决方案是将您的学生标识符声明为字符串,然后您可以执行以下操作,更容易设置:
public class Student extends Person {
@Basic
@NotNull
@Column(name = "studentId")
private String studentIdentifier;
}
并在保存每条记录之前,使用 UUID 类设置学生 ID:
aStudent.setStudentIdentifier(UUID.randomUUID().toString());
希望这有帮助。
关于java - 为SINGLE_TABLE继承模型自动生成person_id和student_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773971/
这是今晚尝试让 JPA/Hibernate 在新项目中工作的第 43 个障碍。 当尝试创建并保留我的 Staffer 类时,我得到: SEVERE: Column 'Person_ID' cannot
在我的 Rails 应用程序中,我有这个模型: class Project :people_projects end 我不明白的是: 当我创建一个新项目时,为什么我的 person_ids 数组的开
我正在尝试使用 Django 编写一个简单的银行应用程序,但我遇到了一个奇怪的错误,缺少位置参数。任何帮助将非常感激。其他模板和 View 工作正常。当我转到登录页面时出现问题。 完整的错误是: Ty
我是 mysql 新手,正在使用在线服务器(MYSQL 版本 5.1.69),我有下表 CREATE TABLE `person_info` ( `id` int(11) NOT NULL AUT
有人可以将这个英语转换成 SQL 我已经尝试了几种方法但没有成功。 SELECT CASE WHEN COUNT(person_id) > 3 THEN person_id end FROM tabl
所以我发现mysql不支持使用像count(distinct(person_id))这样的聚合函数和窗口函数。例如,下面的查询将不起作用。 select count(distinct(person_i
我是 hibernate 新手,学习 doc 保存持久对象 已关注 hibernate doc这是人和电话的一对多关系 @Entity @Table(name = "phone") public cl
我知道这在 Django 圈子里似乎是一个被问得太多的问题,但我不敢说我还没有找到解决这个问题的方法。 我的模型 - from djago.... import User class InfoPe
我想创建一个列来标记员工,只要他们得到晋升(等级变化),如下例所示: +-----------+------------+------------+-------+------+ | PERSON_I
我有这样的数据: +----------+-----------+------------+------+ | group_id | person_id | is_primary | year | +
我是一名优秀的程序员,十分优秀!