首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为@Inheritance批注指定不同的列

如何为@Inheritance批注指定不同的列
EN

Stack Overflow用户
提问于 2009-08-04 11:44:12
回答 2查看 851关注 0票数 1
代码语言:javascript
复制
@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)。(正如鲁本所说)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-04 12:00:14

当定义了InheritanceType.JOINED时,@Id列将自动用于连接。一个Barfoo实例只有一个id值,这个值保存在foo表和barfoo表的id列中。

不需要在barfoo表中有单独的id和foo_id列。默认情况下,也没有必要覆盖barfoo中的id、getter和setter。只有当Barfoo实例的id比Foo实例的id有更强的约束时,才会覆盖id、setter和getter。

票数 1
EN

Stack Overflow用户

发布于 2010-06-18 22:22:07

查看@PrimaryKeyJoinColumn

代码语言:javascript
复制
@PrimaryKeyJoinColumns({
    @PrimaryKeyJoinColumn(name="CHILD_PK1", 
        referencedColumnName="PARENT_PK1"),
    @PrimaryKeyJoinColumn(name="CHILD_PK2",
        referencedColumnName="PARENT_PK2")
})
public class Child extends Parent {
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1227012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档