jpa - 具有空值的复合键的 JPA 保存方法
问题描述
@Builder
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public class ParentId1 implements Serializable {
private String id1;
private String id2;
}
@Entity
@IdClass(ParentId1.class)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Parent1 {
@Id @Column(name = "PARENT_ID1")
private String id1;
@Id @Column(name = "PARENT_ID2")
private String id2;
}
@Test
@Transactional
// Test pass
public void compositeKeyTest1(){
String parentIdStr1 = "parentIdStr1";
Parent1 parent1 = new Parent1();
parent1.setId1(parentIdStr1);
parent1.setId2(null);
nonIdentifyingIdClassParent1Repo.save(parent1);
}
@Test
// Test fail
public void compositeKeyTest2(){
String parentIdStr1 = "parentIdStr1";
Parent1 parent1 = new Parent1();
parent1.setId1(parentIdStr1);
parent1.setId2(null);
nonIdentifyingIdClassParent1Repo.save(parent1);
}
我正在使用 IdClass 研究有关复合键的 JPA。
当复合键具有空值时,我测试了保存方法。
在使用@Transactional 的compositeKeyTest1 中,compositeKeyTest1 将通过@Id 字段具有空值。
显然,parent1 实体没有保存在数据库中。
正如我所料,compositeKeyTest2 不会通过错误日志“列'parent_id2'不能为空”。
听起来它与持久性上下文有关,但我无法理解,因为在 nonIdentifyingIdClassParent1Repo.save(parent1); 之后什么都没有。
解决方案
推荐阅读
- ntp - 在 petalinux 上添加 NTP 守护进程
- docker - Docker 构建缓存不断增长
- office365 - 是否可以实施自定义传输代理来更新 Office365 中的电子邮件?
- c# - 如何处理asp.net MVC c#中的发送参数按钮?
- couchdb - 我们如何创建对数据库具有有限权限的非管理员用户?
- javascript - 如何使这个句子拆分器 regex safari 兼容?
- javascript - InvalidStateError:无法在“范围”上执行“surroundContents”:范围已部分选择非文本节点
- ruby-on-rails - 如何为 Rails 中的嵌套资源编写此条件语句?
- angular - 在使用 Karma/Jasmine 的 Angular 测试中解决“在 afterAll 中抛出一个错误,不可迭代”
- php - 如何使 Html 下拉列表选择的值打印为 CSV?