GAE,JPA,XG-transactions,太多实体组exception

我知道GAE上的XG事务中有5个实体组的限制,但我认为我在一个事务中只使用了3个组(Commodity,Category,CommodityCategory)并且仍然遇到此exception:引起:java.lang.IllegalArgumentException:operating单个事务中的实体组太多。

以下是我的datamodel和dao代码的重要部分:

分类模型

@Entity(name = "Category") public class Category extends BaseDatastoreEntity{ private String name; private Key parentKey; private String parentName; @Unowned @OneToMany(cascade= CascadeType.ALL) private Set commodityCategories = new HashSet(); . . public void addCommodityCategoryInternal(CommodityCategory commodityCategory) { this.commodityCategories.add(commodityCategory); } 

商品模型

 @Entity(name = "Commodity") public class Commodity extends BaseDatastoreEntity implements IRateable{ private String name; private BigDecimal price; . . @OneToMany(mappedBy = "commodity", cascade= CascadeType.ALL, fetch= FetchType.EAGER) private Set pictures = new HashSet(); @Unowned @OneToMany(cascade= CascadeType.ALL) private Set commodityCategories = new HashSet(); . . public void addCommodityCategoryInternal(CommodityCategory commodityCategory) { this.commodityCategories.add(commodityCategory); } 

CommodityCategory模型

 @Entity(name="CommodityCategory") public class CommodityCategory extends BaseDatastoreEntity{ private boolean isDefaultCategory; @Unowned @ManyToOne(cascade= CascadeType.ALL) private Key commodity; @Unowned @ManyToOne(cascade= CascadeType.ALL) private Key category; @SuppressWarnings("LeakingThisInConstructor") public CommodityCategory(boolean isDefaultCategory, Commodity commodity, Category category) { super(true); this.isDefaultCategory = isDefaultCategory; this.commodity = commodity.getId(); this.category = category.getId(); category.addCommodityCategoryInternal(this); commodity.addCommodityCategoryInternal(this); } 

CommodityCategory DAO实施

 @Repository("commodityCategoryDAOImpl") public class CommodityCategoryDAOImpl extends AbstractDAO implements CommodityCategoryDAO{ @Override public CommodityCategory create(boolean isDefaultCategory, Commodity comm, Category cat) { EntityManager em = EMF.get().createEntityManager(); setEntityManager(em); getEntityManager().clear(); getEntityManager().getTransaction().begin(); Commodity commodity = getEntityManager().find(Commodity.class, comm.getId()); Category category = getEntityManager().find(Category.class, cat.getId()); CommodityCategory commodityCategory = new CommodityCategory(isDefaultCategory, commodity, category); getEntityManager().persist(commodityCategory); getEntityManager().getTransaction().commit();//here is the exception getEntityManager().clear(); return commodityCategory; } 

任何想法为什么这不起作用?

谢谢你的回答!

防止贿赂条例

我有类似的问题。 我尝试获得超过5个相同的实体! 从GAE数据存储区输入并获得太多实体组exception。 所以我认为它不依赖于不同的类型,而是依赖于持久性实体。 因为相同类型的每个对象具有不同的实体组。 当试图进入事务所有对象时,你遇到了问题。

因此,为了获得实体的列表,我不再使用事务并且它可以工作