我在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对象时加载收件人(终极,中间)?
请你指出正确的方向
答案 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本身源代码上提供的单元测试。它不漂亮,但它对我帮助很大!