在我的项目中,我得到了类类别(仅重要部分代码):
class Category {
@LazyCollection(LazyCollectionOption.EXTRA)
@ManyToMany(mappedBy = "categories", cascade = CascadeType.REMOVE)
private Set<Entity> entities = new HashSet<Entity>();
/*.rest of code not necessary.*/
}
以及与多对多相关的另一类:
class Entity {
@LazyCollection(LazyCollectionOption.EXTRA)
@ManyToMany(cascade = CascadeType.REMOVE)
private Set<Category> categories;
/*.rest of code not necessary.*/
}
我有一个Categories控制器,我从其中调用方法delete。类声明如下所示:
@Named
@Component
@Singleton
public class Categories extends Controller {
这是我的控制器中的方法:
public Result delete(Long id) {
categoriesService.delete(id);
return ok();
}
我的categoryServiceImpl声明如下:
@Named
@Component
@Singleton
public class CategoriesServiceImpl implements CategoriesService {
以及没有事务的服务中的删除方法:
public void delete(Long id) {
Category category = findById(id);
boolean inTransaction = TransactionSynchronizationManager.isActualTransactionActive();
Logger.info("Am I in transaction" + inTransaction);
/* Exception while trying to access category.getEntities() */
for(Entity entity : category.getEntities()) {
entity.getCategories().remove(category);
entityService.update(entity);
}
category.getEntities().clear();
repo.delete(category);
}
我在尝试访问service delete方法中的category.getEntities()
时遇到异常:
LazyInitializationException: failed to lazily initialize a collection of role: models.Category.entities, could not initialize proxy - no Session]
我知道这是因为这个方法中没有事务。但是当我尝试将事务强制到我的服务方法上时,如下所示:
@Transactional(propagation = Propagation.MANDATORY)
public void delete(Long id) {
或者@Transactional(propagation=propagation.REQUIRES_NEW)
或任何一个传播枚举,我仍然无法在该方法中获得事务。
我做错了什么?我该怎么解决呢?通过任何方式,重构代码,另一种方法或任何想到的?
尝试使用
public void delete(Long id) {
Category category = findById(id);
Hibernate.initialize(category.brands);
boolean inTransaction = TransactionSynchronizationManager.isActualTransactionActive();
//Remaining Code Here
}
问题内容: 我正在使用Play!框架2.0,我陷入了涉及数据库的烦人问题。 假设我有一个(延伸它有几个属性)类(,,,等)。 在某个时候,我想添加一个新属性,可以说(它到底是什么并不重要)。因此,我将属性添加到类中,进行编译和运行。 问题是:我收到有关数据库更改的红色警报(很明显),它要求我按 “ APPLIC CHANGES” (如果我没记错的话)。很好,但是! 所有数据库记录都被删除 ! 结论
这些是以下类别: 在控制器文件中,我有以下文件 列表getQuestion()中的size()引发LazyInitializationException,因为没有打开的会话 我知道,将fetch类型更改为EAGER或在QuestionRepository中的函数定义上方使用JPQL查询可能会解决这个问题,但在我的应用程序中,有些地方没有帮助,我需要延迟fetch。 如何使get问题()函数中的整个
数据库是整个站点的数据储藏室。用户提交的数据可以存储在数据库中,以便未来使用。Play可以通过JDBC和数据库通信。我讲介绍Play和mysql数据库的连接。 Play 2.*版本的默认操作数据库的方式是通过Ebean。Play提供Finder这一帮助类型,可以实现一些简单的数据库查询。 数据库准备 在mysql中增加数据库testing。增加用户"player",密码为"player"。为用户p
这一章主要提供Spring框架新的功能和变更。 升级到新版本的框架可以参考。Spring git。 内容列表 Spring 5.x框架新的功能 Spring 4.x框架新的功能 Spring 3.x框架新的功能 Spring FrameWork 5.0新的功能 JDK 8+和Java EE7+以上版本 整个框架的代码基于java8 通过使用泛型等特性提高可读性 对java8提高直接的代码支撑 运行
问题内容: 我已经开发了一个Spring / JPA应用程序: 服务,存储库和域层即将完成 。 该 所缺的只是层是网络层 。我正在考虑将Playframework 2.0用于Web层,但不确定是否可以 在Playframework 2.0类中注入/使用spring bean 。 这可能吗?如果可以,怎么办? 问题答案: 您可以。已针对Play 2.5.x更新: https://github.com
从戏剧!框架文档: Play2.0中没有内置的JPA实现;您可以选择任何可用的实现。例如,要使用Hibernate,只需将依赖项添加到项目中: 我的选择是什么而不是冬眠? 你认为什么最适合留言板网站? 我知道Hibernate有一点开销,对吗?