1

所以我正在创建一个 Play Java 应用程序,并使用默认的 Ebean 作为我的 ORM 框架。我在双向映射ManyToOne中设置了我的对象。OneToMany

我遇到的问题是,当我SimCard.find.all()查看pool任何返回对象中的PlanPool属性时,除了 ID 之外,它的所有属性都为空。

这是我的对象的设置:

模拟卡:

@Entity
public class SimCard extends Model {
    private static final long serialVersionUID = 8664141460726922270L;

    @Id
    public String simId;

    public String displayName;

    @ManyToOne
    public PlanPool pool;

    @OneToMany(mappedBy = "simCard")
    public List<SimUsage> usages;

    public static Model.Finder<String, SimCard> find = new Model.Finder<String, SimCard>(String.class, SimCard.class);
}

计划池:

@Entity
public class PlanPool extends Model {
    private static final long serialVersionUID = 4083095490040410160L;

    @Id
    public Long poolId;

    public String displayName;

    @ManyToOne
    public Plan plan;

    @OneToMany(mappedBy = "pool")
    public List<SimCard> simCards;

    @Required
    public Boolean isUnlimited;

    @Required
    public Boolean isDefaultPool;

    @Required
    public Long maxBytes;

    @Required
    public Long maxCards;

    public static Model.Finder<Long, PlanPool> find = new Model.Finder<Long, PlanPool>(Long.class, PlanPool.class);
}

我还有一些以相同的一对多、多对一方式设置的对象。但问题对所有人来说都是一样的。

4

1 回答 1

1

看来我的设置是正确的。我手动将东西插入数据库,由于某种原因搞砸了 Ebean;它无法正确获取映射。当您使用 Ebean 方法(保存、查找等)时,它会正确写入数据库并且现在可以正常工作。

另一方面,它写入数据库的值看起来与我输入的完全一样,这有点奇怪,但它对我不起作用。我猜它做了一些我看不到的不同的事情,因为 find 方法的结果在不同的会话中是一致的。

于 2013-07-12T14:33:41.117 回答