- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用内存中的 H2 DB 来测试某些实体的持久性,但我认识到 @SequenceGenerator
永远不会按应有的方式被调用,无论是在构建平台运行时还是在在 Eclipse 中使用 RunAs->JUnit 测试运行它。
我可以肯定地说,这些序列是在 H2 DB 内部生成的。当我连接到生成的 H2 时,我什至可以选择它们。所以这绝对不是H2内部的问题,而是Hibernate的问题。(通常 Hibernate 在持久化需要 ID 的实体时会自动分配一个 ID)。
实体
@Entity
@Table(name = "HOUSE_USERDATA")
public class UserData {
@Id
@Column(name = "HU_ID")
@GeneratedValue(generator = "SEQ_HOUSE_USERDATA", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(sequenceName = "SEQ_HOUSE_USERDATA", name = "SEQ_HOUSE_USERDATA", allocationSize = 2)
private Long huId;
@Column(name = "HU_DATA")
@Size(max = 1000)
private String m_data;
@ManyToOne
@JoinColumn(name = "HR_ID")
private Registry m_registry;
//more code [...]
}
引用实体中的引用...
@OneToMany(mappedBy = "registry")
private List<UserData> userDataList;
持久性单元...
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.foo.bar.all.entity</class>
<!-- all entity references -->
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.connection.username" value="sa"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
<property name="hibernate.connection.url"
value="jdbc:h2:inmemory;INIT=runscript from 'classpath:testscripts/drop_h2.sql'\;runscript from 'classpath:testscripts/create.sql'"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.use_sql_comments" value="true" />
</properties>
</persistence-unit>
JUnit 测试中的调用...
Registry registry = new Registry();
registry.setClientId("clientId");
List<UserData> userDataList = new ArrayList<>();
UserData userData1 = new UserData();
userData1.setData("User defined data 1.");
userData1.setRegistry(registry);
UserData userData2 = new UserData();
userData2.setData("User defined data 2.");
userData2.setRegistry(registry);
userDataList.add(userData1);
userDataList.add(userData2);
registry.setUserDataList(userDataList);
entityManager.persist(registry);
Registry result = entityManager.find(Registry.class, "clientId");
//MUST NOT BE NULL, BUT IS NULL
assertThat(result.getUserDataList().get(0).getId(), is(not(nullValue())))
其他值已正确保留。仅未生成 ID。 (我想知道为什么这个测试对所有其他值都有效,因为 ID 在生成的数据库中被定义为 NOT NULL,所以应该存在持久性异常或其他情况)。任何想法为什么序列生成器不生成任何东西(我也尝试了GenerationType.AUTO
,但没有区别)?
最佳答案
当您执行 entityManager.persist(registry)
时,存储 Registry
并检查该类的所有映射。它将遇到 UserData
对象的集合,但由于没有与 PERSIST
匹配的 cascade
属性,因此它不会存储 UserData
对象。
它只会存储顶级Registry
对象。如果您想更改此设置,请将 cascade={CascadeType.ALL}
或至少 cascade={CascadeType.PERSIST}
添加到 @OneToMany
注释中,告诉 Hibernate 它还需要检查集合中的新元素并保留它们。
或者首先存储 UserData
元素,然后再存储 Registry
。
关于java - SequenceGenerator 在 JUnit 测试中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39035773/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!