我正在使用Spring和Hibernate.我正在运行jUnit测试,如下所示:
String number = invoiceNumberService.nextInvoiceNumber();
Run Code Online (Sandbox Code Playgroud)
和invoiceNumberService方法是:
InvoiceNumber invoiceNumber = invoiceNumberRepository.findOne(1L);
Run Code Online (Sandbox Code Playgroud)
它使用简单的spring数据存储库方法,并且运行良好.但是当我重写此方法以使用锁定时:
@Lock(LockModeType.PESSIMISTIC_READ)
@Override
InvoiceNumber findOne(Long id);
Run Code Online (Sandbox Code Playgroud)
我收到"javax.persistence.OptimisticLockException:Row被另一个事务更新或删除"
我无法理解为什么它的乐观锁定异常,而我使用的是悲观锁定?当另一个交易正在改变这个实体时,这个部分在哪里?我已经挖了很多类似的问题,我非常绝望.感谢您的帮助
解决方案:
问题出在我的测试类的init函数中:
@Before
public void init() {
InvoiceNumber invoiceNumber = new InvoiceNumber(1);
em.persist(invoiceNumber);
em.flush();
}
Run Code Online (Sandbox Code Playgroud)
缺乏
em.flush();
Run Code Online (Sandbox Code Playgroud)
这将数据保存到数据库中,因此findOne()现在可以对其进行检索
我的问题是我有应用程序,它使用Spring配置文件.在服务器上构建应用程序意味着配置文件设置为" wo-data-init".对于其他构建,有" test"配置文件.当它们中的任何一个被激活时,它们不应该运行Bean方法,所以我虽然这个注释应该工作:
@Profile({"!test","!wo-data-init"})
Run Code Online (Sandbox Code Playgroud)
它似乎更像是在运行if(!test OR !wo-data-init),在我的情况下我需要它运行if(!test AND !wo-data-init)- 它甚至可能吗?
在关于 WiX 的每个教程和 HowTo 网站(如此处)中,我读到我应该添加对其他项目的引用,但是当我选择“添加引用”时,“项目”选项卡中的“项目”列表中没有任何内容。我在 Visual Studio 2012 上尝试过此操作,之前使用 WiX 3.7,现在使用 3.8。
如果有解决方案只是不使用“添加引用”功能,我该如何以其他方式构建?我是初学者,所以我真的不知道如何在没有此功能的情况下使用 WiX,如果我在发布向导中发布了我的 C# 应用程序,我应该将所有生成的文件添加到组件组中,每个文件都在<Component>标记中?