首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA和Ebean ORM:空集合不为空

问JPA和Ebean ORM:空集合不为空
EN

Stack Overflow用户
提问于 2011-03-26 00:52:55
回答 2查看 1K关注 0票数 2

我已经开始将一个项目从手工编写的JDBC ORM代码切换到Ebeans。到目前为止,它非常棒;Ebeans轻量级且易于使用。

然而,我遇到了一个严重的问题:当检索一个应该为空的一对多列表时,它实际上只有一个元素。这个元素看起来像是某种代理对象,它的字段都是空的,所以它破坏了在集合中循环的代码。

我在这里包含了一些简短的定义:

代码语言:javascript
复制
@Entity
class Store {
    ...
    @OneToMany(mappedBy="store",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
    List<StoreAlbum> storeAlbums = new LinkedList<StoreAlbum>();
}

@Entity
class StoreAlbum {
    ...
    @ManyToOne(optional=false,fetch=FetchType.EAGER)
    @JoinColumn(name="store_id",nullable=false)
    Store store;
}

那个..。是所有标准的getter和setter的位置。检索代码如下所示:

代码语言:javascript
复制
Store s = server.find(Store.class)
            .where()
            .eq("store_id",4)
            .findUnique();

Assert.assertEquals("Sprint",s.getStoreName());
Assert.assertEquals(0, s.getStoreAlbums().size());

众所周知,数据库包含"Sprint“的”store“行,而”store_album“表不包含该存储的任何行。

第二次断言时,JUnit测试失败。它找到一个包含1个元素的列表,这是某种损坏的StoreAlbum对象。调试器将对象显示为"com.lwm.catalogfeed.domain.StoreAlbum$$EntityBean$test@1a5e68a“类型,所有字段声明为nullable=false (和optional=false)时均为空值。

我是不是漏掉了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-19 05:01:18

我想我应该更新一下这个...我最终放弃了EBeans,转而使用MyBatis实现。MyBatis非常棒;它的手册很容易阅读,而且很透彻。MyBatis做了您期望它做的事情。我很快就把它启动并运行起来了。

EBeans似乎没有检测到关联集合的联接导致了一堆空ids,但是MyBatis干净利落地处理了这个场景。

票数 1
EN

Stack Overflow用户

发布于 2013-11-15 15:32:28

我遇到了同样的问题,并能够通过向辅助表(StoreAlbum)添加一个标识列来解决它。我没有调查原因,但我认为在这种情况下,Ebean需要一个主键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5435562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档