【发布时间】:2014-05-24 17:32:19
【问题描述】:
我正在使用 Spring Data (jpaRepository) + Oracle 11g 数据库。
这是我的 JUnit 测试代码:
@Test
public void testAjoutUtilisateur() {
Utilisateur utilisateur = new Utilisateur();
(...)
utilisateur=repository.save(utilisateur);
Utilisateur dbutilisateur = repository.findOne(utilisateur.getIdutilisateur());
assertNotNull(dbutilisateur);
当我调试时,我发现repository.save 方法返回的“utilisateur”对象的 id 类似于“2100”,而数据库中相应插入的行的 id 类似于“43 ”。
我有一个带有序列和触发器的 Oracle 数据库,以便为我的“Utilisateur”表的 id 设置自动递增属性。
这是我的 Utilisateur 实体中的 id 定义:
@Entity
@NamedQuery(name="Utilisateur.findAll", query="SELECT u FROM Utilisateur u")
@SequenceGenerator(sequenceName="ID_UTILISATEUR_SEQ", name="ID_UTILISATEUR_SEQ")
public class Utilisateur implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ID_UTILISATEUR_SEQ")
private Long idutilisateur;
问题出在哪里?是否在 save 方法中?
谢谢。
编辑:
我发现问题已经被@jhadesdev的解决方案解决了,并且我正在谈论的数据线是在触发器处于活动状态时插入的。
最后,我不得不提一下,默认情况下,JUnit 测试似乎不会在数据库中插入数据(它先插入然后回滚)。为了使这种行为无效,我们必须在测试类中指定@TransactionConfiguration(defaultRollback=false) 注解。
例如(以我为例):
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:context/dao-context.xml" })
@TransactionConfiguration(defaultRollback=false)
@Transactional
public class UtilisateurRepositoryTest {
希望它可以帮助某人。
【问题讨论】:
标签: eclipse spring oracle11g spring-data-jpa