0

是否有任何可能的变体将数据从另一个表插入 Hibernate 实体。例如,我们有以下 DB 模型:

ItemTable:
ITEM_ID NUMBER not null,
ITEM_NAME VARCHAR2,
I_OBJECT_ID NUMBER;

ObjectTable:
OBJECT_ID NUMBER not null,
OBJECT_NAME VARCHAR2;

以及以下java代码:

@Entity
@Getter
@Setter
@Table(name = "ITEMTABLE")
public class ItemDTO {

   @Id
   @Column(name = "ITEM_ID")
   private long id;

   @Column(name = "ITEM_NAME")
   private String itemName;

   @Column(name = "I_OBJECT_ID")
   protected long objectId;

   **//TODO: here we need OBJECT_NAME column form ObjectTable**
   private String objectName;

}

所以我们只需要一列而不是整个 ObjectTable 实体作为objectName道具。

我尝试过这样的构造:

@JoinTable(name = "OBJECTTABLE", joinColumns = {
        @JoinColumn(name = "OBJECT_ID", referencedColumnName = "I_OBJECT_ID") })
@Column(name = "OBJECT_NAME")

但它失败了:

oracle.jdbc.OracleDatabaseException: ORA-00904: "ITEMDTO0_"."OBJECT_NAME": invalid identifier

@JoinTable@JoinColumn的每个示例都假设我需要包含另一个实体作为道具,这将是多余且缓慢的。

这可以以任何方式解决吗?

PS关于为什么我不想将第二个实体包含在第一个实体中的两美分,是因为我希望我的 JpaRepository 将允许我直接在连接列上进行排序/过滤。

请指教。

4

1 回答 1

1

使用@SecondaryTable注释很容易将多个表映射到同一个实体。更准确地说,JPA 将主表与辅助表连接起来并填充字段。

@Entity
@Table(name = "ItemTable")
@SecondaryTable(name = "ObjectTable", pkJoinColumns = 
    @PrimaryKeyJoinColumn(name = "OBJECT_ID", referencedColumnName="I_OBJECT_ID")
)
public class ItemDTO {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ITEM_ID")
    Long id;

    @Column(name = "ITEM_NAME")
    String name;

    @Column(name = "OBJECT_NAME", table = "ObjectTable")
    private String objectName;

}
@Entity
@Table(name = "ObjectTable")
public class ObjectsEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "OBJECT_ID")
    private Long id;


    @Column(name = "OBJECT_NAME")
    private String name;
}

顺便说一句:在问题中,数据模型@Table@Column注释中的列和表的名称不同。应该合并。

于 2020-06-09T21:06:39.500 回答