假设我有两个表,称为 student 和 class.class id 是 student 表中的外键。某些学生的班级 ID 列也可能为空(表示没有为他们分配任何班级)。如果我们使用 spring jpa 为这些学生获取数据,则类实体对象将为 null。我宁愿想要一个空对象而不是null,这样就可以避免手动空检查。如何实现此目的?
学生实体-学生Id、姓名、年龄、班级Id
班级实体-班级Id、班级名称、指定教师姓名
您可以使用@PostLoad
方法在加载学生后将类设置为某个虚拟值。但是,您不能持久化该实体,因为 JPA 会尝试持久化该虚拟实例。
因此,我将全距离并在数据库中创建一行以进行NO_CLASS
而不是具有空id引用该行。这样,对象模型就可以与数据模型匹配。
变化是相当琐碎和普通的旧Java。我也为我的JPA应用程序中的集合这样做。
只需在实体的getter中执行空检查。
public Class getClass() {
if (null == this.myClass) {
return new Class(); // assuming the default constructor resembles an empty class
}
return this.myClass;
}
如果代码中没有真正的“空”类
,只需返回一个可选
编辑:顺便说一下,使用“类”作为名称是一个非常危险的想法,因为它与Java的<code>类</code>关键字冲突。
无论如何,你要进行直接或间接的人工检查。
将记录获取为 java 8 可选会有所帮助。
当使用字段类型访问时,可以用自己的方式实现getter和setter方法。例如,您可以实现一个getMyValue()方法,该方法将MyValue属性包装在可选的
@Entity
public class SomeClass {
...
@Column
private String myValue;
...
public Optional getMyValue() {
return Optional.ofNullable(myValue);
}
public void setMyValue(LocalDate myValue) {
this.myValue= myValue;
}
...
}
Hibernate 5.2还向IdentifierLoadAccess接口引入了loadOptional(Serializable id)方法。当您不能确定数据库是否包含具有所提供id的记录时,您应该使用此方法来指示结果可能为空
我有一对一关系的问题-保存后,外键总是被设置为空,即使我有关联的对象。我正在使用Hibernate4.3。7.最终版本为Spring 4.0。0.0版本和MySql 5.6数据库。 在我保存LawFirmProfile对象列后的情况下,参考lawFirm的lawFirm_id始终为空。 实体: 以下是负责保存此记录的代码: Hibernate和Spring配置: 道也是Spring豆,方法注释为@
我建立了一个数据库连接。然后,我尝试建立连接,如果出现异常,则返回。在代码的下面,我有一个Finally块,我打算用它作为一个catch all来关闭连接。 然而,如果初始连接失败,它将跳转到我的con所在的最后一个块。close()引发空指针异常。最好的办法是什么?有没有办法测试con是否为null?我试过if(con.isValid(0))和con。等于(null)和con==null,它们都
我被侵犯了-在试图保存Hibernate实体时未找到父密钥 我有父实体: 子实体看起来像(在数据库中,它在parents表的parents_id字段上有外键): 在创建父对象和childAssignments对象之后,我将向父对象添加childAssignment 预期结果是使用ID保存新的父项,并在使用此ID保存子项后,但hibernate在保存时似乎不知道父项的ID,我应该如何建立关联以使其工
我有一个表,有一个复合PK:Customer;我有一个视图,没有PK:Purchase 为了绑定我的实体,Hibernate强制我声明一个PK。所以我为购买创建了一个复合PK。 普切斯: 普查塞普克:
在一个双向关系中,我不能将子外键与父外键相关联。我有一个父类联盟是这样定义的: 子类ServiceCharge是这样定义的: 然后运行测试代码: 正如您所看到的,在将Union u持久化到数据库之后,我将这两个实体与一个控制器相关联,ServiceController.Add只是通过使用Union setter将实体charge1添加到servicecharges列表中,然后将该实体持久化到数据库
db架构包含表AUTHOR和BOOK,列如下: 问题是,对象在没有作者的书时用默认值填充。如何检测左联接没有右表的对象?一种方法是检查图书主键字段是否为空。还有别的办法吗?