代码之家  ›  专栏  ›  技术社区  ›  qnoid

如何为@inheritance jpa注释指定其他列

  •  1
  • qnoid  · 技术社区  · 15 年前
    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    public class Foo   
    
    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    public class BarFoo extends Foo
    
    mysql> desc foo;
    +---------------+-------------+
    | Field         | Type        |
    +---------------+-------------+
    | id            | int         |
    +---------------+-------------+
    
    mysql> desc barfoo;
    +---------------+-------------+
    | Field         | Type        |
    +---------------+-------------+
    | id            | int         |
    | foo_id        | int         |
    | bar_id        | int         |
    +---------------+-------------+
    
    mysql> desc bar;
    +---------------+-------------+
    | Field         | Type        |
    +---------------+-------------+
    | id            | int         |
    +---------------+-------------+
    

    是否可以将列barfo.foo_id指定为联接列?

    是否允许将barfoo.id指定为barfoo的@id,因为您要重写foo类的getter/seeter?

    我理解这段关系背后的原理图(或者至少我认为我理解),我对它们很满意。

    我想要Barfoo的显式ID字段的原因正是因为我希望在查询Barfoo或在“强”约束中使用时避免使用联接键(foo-id,bar-id)。(正如鲁本所说)

    2 回复  |  直到 13 年前
        1
  •  1
  •   Ruben    15 年前

    定义inheritanceType.joined后,@id列将自动用于联接。一个barfoo实例只有一个id值,并且它被持久化在foo和barfoo表的id列中。

    在barfoo表中不需要单独的id和foo-id列。在默认情况下,也不需要覆盖barfoo中的id getter和setter。只有当barfoo实例的ID具有比foo实例的ID更强的约束时,才能覆盖id setter和getter。

        2
  •  1
  •   Otiel user577803    13 年前

    签出@primarykeyjoincolumn

    @PrimaryKeyJoinColumns({
        @PrimaryKeyJoinColumn(name="CHILD_PK1", 
            referencedColumnName="PARENT_PK1"),
        @PrimaryKeyJoinColumn(name="CHILD_PK2",
            referencedColumnName="PARENT_PK2")
    })
    public class Child extends Parent {
        ...
    }