如何描述Ebean的桥接表?

时间:2013-11-08 02:21:15

标签: java jpa playframework ebean playframework-2.2

假设我有这些表格:

ORDER: id
ITEM: id
ORDER_ITEM: order_id, item_id

表格ORDER_ITEMORDERITEM之间的桥牌表。

如何将此三人组描述为Ebean

我不想使用原始SQL,因此我仍然可以创建和更新这些实体。

更新 11月9日星期六02:32:40 UTC 2013

好的,让我们更难以解决这个问题,更能代表我的实际情况。列名称不符合约定:

ORDER: order_number
ITEM: item_number
ORDER_ITEM: my_order, my_item

1 个答案:

答案 0 :(得分:15)

除非您希望除外键之外还有其他字段,否则您不必自己创建特殊的桥接表。

在Order类中,您应该定义字段:

@ManyToMany
public List<Item> items;

在Item类中:

@ManyToMany(mappedBy = "items")
public List<Order> orders;

Ebean将为您生成桥牌表。

此外:

您可以在两个类之间使用非对称关系类型:

@ManyToMany
@JoinTable(name="Order_Item")
public List<Item> items;

@ManyToOne
public Order order;

如果订单中的可选字段,并且您不希望在Item表中包含大量空字段。

<强>更新

这对你有用。现在,所有表名和列名都由注释明确命名:

@Entity
@Table(name="ITEM")
public class Item extends Model {
    @Id
    @Column(name="item_number")
    public Integer id;

    @ManyToMany(mappedBy = "items")
    public List<Order> orders;
}

@Entity @Table(name="ORDER") public class Order extends Model {
    @Id
    @Column(name="order_number")
    public Integer id;

    @ManyToMany
    @JoinTable(name="ORDER_ITEM",
            joinColumns=@JoinColumn(name="my_order",referencedColumnName = "order_number"),
            inverseJoinColumns = @JoinColumn(name="my_item", referencedColumnName="item_number"))
    public List<Item> items; }

代码在这里:https://github.com/cosmolev/BridgeTable/tree/master/app/models