使用jpa注释映射以下与ebean的关系的指南

时间:2014-10-14 23:50:21

标签: java jpa ebean

我在DB中有以下两个实体(结构是固定的)我试图使用JPA Annotations映射,EBEAN是ORM。

我有以下豆子:

class Item {
   public Long id;
   public String name;
   public Consignee intermediate;
   public Consignee ultimate;
}

class Consignee {
   public Long id;
   public String name;
   public String address;
   public Item item;
}

及其相应的表格:

Item
----
id
name

Consignee
---------
id:
name
address
item_id
type: [1,2] / 1: intermediate, 2:ultimate

主要实体是ITEM,尽管这种关系是从收货方那里映射的。

如何使用Annotations对此进行映射,以便在从DB中获取Item对象时加载收件人(终极,中间)?

请你指出正确的方向

1 个答案:

答案 0 :(得分:1)

您尝试映射到Ebean的两个表称为实体模型,实体收件人与项目之间的关系是一对多关系。

这种关系可以在收货人一侧用@OneToMany注释映射,在项目一侧用@ManyToOne映射。

Consignee的字段类型也可以使用枚举值作为整数进行映射,其余字段可以通过@Column注释进行映射。

您的要求的可能实现可能类似于:

public enum CONSIGNEE_TYPE {
      INTERMEDIATE,
      ULTIMATE
}

@Entity
@Table(name = "Consignee")
public class Consignee extends Model {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   public Long id;

   public String name;

   public String address;

   @Enumerated(EnumType.ORDINAL)
   public CONSIGNEE_TYPE type;

   @Column(name="item_id")
   @OneToMany(cascade = CascadeType.ALL, mappedBy = "consignee", fetch = FetchType.EAGER)
   public List<Item> item = new ArrayList<Item>();

   //TODO: Generate Constructors/Getters/Setters
}

@Entity
@Table(name = "Item")
public class Item extends Model {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   public Long id;

   public String name;

   @ManyToOne(optional = false, fetch = FetchType.EAGER)
   public Consignee consignee = new Consignee();

   //TODO: Generate Constructors/Getters/Setters
}

我从班级物品中删除了最终和中间收货人类型的歧义,因为您可以将收货人的类型存储在收货人本身。

希望这有帮助。

作为未来非常好的资源,我建议您阅读Ebean本身源代码上提供的单元测试。它不漂亮,但它对我帮助很大!