Как указать другой столбец для аннотации @Inheritance JPA - PullRequest
1 голос
/ 04 августа 2009
@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 как @Id BarFoo, так как вы переопределяете метод получения / просмотра класса Foo?

Я понимаю схемы, лежащие в основе этих отношений (или, по крайней мере, мне так кажется), и я в порядке с ними.

Причина, по которой мне нужно явное поле идентификатора для BarFoo, заключается именно в том, что я хочу избежать использования объединенного ключа (foo _id, bar _id) при запросе BarFoo (s) или при использовании в «более сильном» ограничении. (как сказал Рубен)

Ответы [ 2 ]

1 голос
/ 18 июня 2010

Check @ PrimaryKeyJoinColumn

@PrimaryKeyJoinColumns({
    @PrimaryKeyJoinColumn(name="CHILD_PK1", 
        referencedColumnName="PARENT_PK1"),
    @PrimaryKeyJoinColumn(name="CHILD_PK2",
        referencedColumnName="PARENT_PK2")
})
public class Child extends Parent {
    ...
}
1 голос
/ 04 августа 2009

Если определено InheritanceType.JOINED, столбец @Id будет автоматически использоваться для объединения. Существует только одно значение id для экземпляра Barfoo, и оно сохраняется в столбце id таблицы foo и barfoo.

Нет необходимости иметь отдельные столбцы id и foo_id в таблице barfoo. Также нет необходимости по умолчанию перезаписывать идентификатор get и setter в barfoo. Вы можете перезаписать только установщик и получатель идентификатора, если идентификатор экземпляра Barfoo имеет более строгие ограничения, чем идентификатор экземпляра Foo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...