gpt4 book ai didi

java - 尝试多次调用 save 时违反完整性约束

转载 作者:行者123 更新时间:2023-12-01 14:50:15 24 4
gpt4 key购买 nike

考虑以下类:

@Entity
public class MyDomain{

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@OneToOne
private AnotherDomain anotherDomain;

//getters and setters here
}
<小时/>
@Repository
public MyDomainDao extends DaoBase<MyDomain>{

public List<MyDomain> doSomething(AnotherDomain parameter){
//code does something here
}

}
<小时/>
public class DaoBase<I>{

@Autowired
private SessionFactory sessionFactory;

public void save(I object){
sessionFactory.getCurrentSession().saveOrUpdate(object);
}
}
<小时/>
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:context.xml"})
@Transactional(propagation = Propagation.REQUIRED)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class MyDomainDaoTest {

@Autowired
private MyDomainDao dao;

@Mock
private AnotherDomain anotherDomain;

@Before
public void setUp() {
this.setupListOfMyDomain();
}

@Test
public void testDoSomething(){
//test the method here
}

private void setupListOfMyDomain(){
MyDomain domain = null;

//five rows of MyDomain
for(int i=0; i<=4; i++){
domain = new MyDomain();
domain.setAnotherDomain(anotherDomain);
dao.save(domain);
}
}
}

总而言之,我有一个简单的实体类 (MyDomain) 和一个从父类(super class) DaoBase 扩展的域 dao (MyDomainDao) 。正是在这个父类(super class)中调用了持久化的 session ,并且这个父类(super class)也负责保存/更新/删除实体类。通过继承,子类只需定义子类特定的方法。

当我运行单元/集成测试MyDomainDaoTest时,问题就开始了。我想测试 MyDomainDao 中定义的方法 doSomething() 。为此,我需要在数据库中测试五个行(我在内存中使用 HSQLDB),因此需要在方法 setupListOfMyDomain() 中进行循环。该循环的奇怪之处在于我在第二次迭代时收到此错误:

ERROR JDBCExceptionReporter - integrity constraint violation: unique constraint or index violation; SYS_CT_10231 table: MyDomain 

没有比这更神秘的了。我知道 ID 是在第一次迭代时生成的。如果我尝试保留另一个对象,为什么在后续迭代中会出现完整性约束违规?

最佳答案

我认为您的映射有问题。您正在声明 MyDomainAnotherDomain 之间的一对一关系,但在您的单元测试中,MyDomain 的 5 个实例共享同一个实例AnotherDomain 因此您应该使用多对一关系。

关于java - 尝试多次调用 save 时违反完整性约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com