我想将两个表(ManyToOne连接)映射到Java中的一个对象。一个是主要的CatalogObject表,第二个只是可能的对象类型的字典。在Java中,我只想拥有String类型,而不是映射到新对象。 当我要搜索类中的所有对象(例如“数据库”)时,我必须首先找到类型为“数据库”的ID,然后查找所有指定此ID的CatalogObject。看起来有点乏味。
CatalogObject Table:
ID, Name, Parent_ID (FK), TYPE_ID (FK)
Type Table:
ID, Type.
我已经使用CatalogObject和CatalogObjectType类创建了一个映射,但是CatalogObjectType类现在仅包含单个String。
public class CatalogObject implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
CatalogObject parent;
String name;
@ManyToOne
@JoinColumn(name = "type_id")
CatalogObjectType type;
}
public class CatalogObjectType implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
String name;
}
我只想用关联类型的String值替换CatalogObjectType。如何为Hibernate / JPA配置它?能做到吗?
我想要的是:
public class CatalogObject implements Serializable {
...
String name;
@SomeAnnotation(name = "type_id")
String type;
}
答案 0 :(得分:0)
是的,您可以通过2个简单的步骤将实体映射到2个数据库表:
@Table
和@SecondaryTable
注释对实体进行注释,并提供第一张和第二张表的名称作为名称参数的值。@Column
注释来注释要映射到辅助表的每个属性,并将辅助表的名称设置为表属性的值。 @Table
注释定义默认情况下实体属性映射到的主表。
@SecondaryTable
批注指定实体要映射到的第二个数据库表。
要做的就是将2个数据库表映射到一个实体。
您可以查看this link以获得带有示例的详细说明。