- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已将几个模型类中的代码从字段访问器更改为属性访问器,并且还从 List 更改为 Set,因为顺序并不重要。以下是我的实体类。
@Entity
@Table(name = "TPYP_GAME")
public class Game extends AbstractGeneratedIdEntity{
private static final long serialVersionUID = -1390767030654384142L;
private static final String GAME_FIELD = "GAME";
private GameypeEnum gameTypeEnum;
private Set<GameCode> gameCodes;
@Transient
public GameTypeEnum getGameTypeEnum() {
return gameTypeEnum;
}
@OneToMany(cascade = CascadeType.ALL, mappedBy = GAME_FIELD, fetch = FetchType.LAZY)
public Set<GameCode> getGameCodes() {
return gameCodes;
}
public void setGameTypeEnum(GameTypeEnum gameTypeEnum) {
this.gameTypeEnum = gameTypeEnum;
}
public void setGameCodes(Set<GameCode> gameCodes) {
this.gameCodes = gameCodes;
}
我调试了源代码,发现从存储库获取数据后提交事务时抛出以下异常。
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction;
nested exception is javax.persistence.RollbackException: Error while committing the transaction
javax.persistence.RollbackException: Error while committing the transaction java.util.HashSet
cannot be cast to org.hibernate.collection.PersistentCollection
我不知道如何解决它。我错过了什么?
<小时/>客户端代码:
@Transactional(readOnly = true)
public List<Game> getGames(String nameContains, Long pageSize){
if(!nameContains.isEmpty() && pageSize !=null){
return repository.findAll(nameIsLike(nameContains), constructPageSpecification(pageSize)).getContent(); }
else{ if(pageSize != null){
return repository.findAll(null, constructPageSpecification(pageSize)).getContent(); }
else if(!nameContains.isEmpty()){
return repository.findAll(nameIsLike(nameContains)); }else{ return repository.findAll();
}
}
}
最佳答案
看起来setGameCodes
正在用新创建的HashSet
替换从数据库读取的Set
,而不是添加到现有的或从现有的中删除当您尝试将更改提交回数据库时,这会导致问题。
也许setGameCodes
应该做
this.gameCodes.clear();
this.gameCodes.addAll(gameCodes);
而不是
this.gameCodes = gameCodes;
关于java.util.HashSet 无法转换为 org.hibernate.collection.PersistentCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18745252/
我的数据库中有一对多关系。 编辑、删除和添加 元素过去工作得很好。但是,经过一些更改(我无法全部跟踪它们)后,它不再起作用。 现在,当我获取具有一对多关系的对象时,我会得到一个持久集合来表示我的多方集
当您已经知道父实体的 id 并且还知道该实体实际上存在于数据库中时,有没有办法获取实体的 Collection 属性,无需触发数据库查询? 获取此类集合的最简单方法当然是使用 EntityManage
这是一个益智游戏! :D 有没有办法强制 Hibernate 加载实体的集合,而不先加载整个实体? 让我更好地解释一下。我有一个以这种方式注释的角色实体: @Entity(name="Role") @
我有一个函数可以获取今天所有的“网络旅游”。 我有一个像这样的自定义存储库: public function toursTodayByNetwork($network){ $todayStar
我在 Zend Framework 2 项目中使用 Doctrine 2 ORM。 我试图坚持多对多的关系。我遵循了描述的文档 here (许多)。 尝试持久化数据时:$em->persist($fo
我在两个表到第三个表之间有关系,并带有额外的行,如下所示 question /** @Entity */ class Illness { /** @Id @GeneratedValue @Column
据我了解,当您通过存储库查询数据库时,您将获得 PersistentCollection,而当您使用您的实体时,您将获得 ArrayCollection。 所以请考虑我的用户实体有一对多的自引用关系。
我有一对关联。它们是多对多的,我使用显式创建的实体来加入它们,这样我就可以获得有关关系的元数据。虽然它们是相同的,但一个有效,另一个无效。更糟糕的是,上周,它们都起作用了,从那以后我就再也没有碰过它们
我正在尝试创建一个用于创建用户的新装置。 这是 fixture : class UserFixtures extends Fixture implements DependentFixtureInte
有谁知道如何模拟 Doctrine PersistentCollection? 当我尝试使用 PHPUnit 和 Mockery 直接模拟类时,我得到一个异常,内容如下: Mockery\Except
我正在获取具有多对多关系的数据,我想定义一个自定义方法。是否有可能(以及如何)使用类似的东西: $hotel = $entityManager->getRepository('Hotels')->fi
我正在使用 symfony2,但无法在 twig 中获取相关实体。 所以我有我的主要实体,我们称它为 Post,它具有 OneToMany 关系: /** * @ORM\OneToMany(targ
我用 Symfony2 制作了一个 Web 应用程序,其中一个 User 有一个数组关联 ManytoMany 与实体 Mission。用户可以通过表单上传实体 $product,表单传递的数据之一是
我正在使用 Symfony 4.1 和 SonataAdminBundle 3.36。 当我在 ManyToMany 关系字段调用标签上设置 ModelType::class 时出现此错误: No e
我有一个上传文件,我想从那里显示数据库中的所有类别,但我一直收到 EntityType 错误,我不知道为什么以前工作。 这是错误:Cannot assign Doctrine\ORM\Persiste
我正在使用 Symfony 3.1 和 Doctrine 2.5。 我一如既往地设置了一个多对多关系: manyToMany: placeServices: t
我已将几个模型类中的代码从字段访问器更改为属性访问器,并且还从 List 更改为 Set,因为顺序并不重要。以下是我的实体类。 @Entity @Table(name = "TPYP_GAME") p
谁能告诉我如何配置 Symfony2/Doctrine 以从实体中的指定列为 PersistentCollection 中的对象编制索引? 例如假设我们有两个表;类别和产品,许多产品属于一个类别。当我
我正在构建一个应用程序,用户可以在其中编辑一些数据,然后会看到一个屏幕,用户可以在其中确认(并评论)他的编辑。 在确认表单中,我显示了对实体所做的更改。这适用于“正常”字段。下面是一些用于检查单个字段
我在标签和文章实体之间有多对多关系,插入效果很好,但编辑表单(editAction 函数)的创建不起作用。所有代码都在那里: Article.php created = $created; $
我是一名优秀的程序员,十分优秀!