К внешним ключам добавляется случайное число при использовании наследования TABLE_PER_CLASS Hibernate - PullRequest
0 голосов
/ 13 июля 2011

В настоящее время в моей модели домена есть следующее:

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
abstract class Item {
    @ManyToOne
    @ForeignKey(name="FK_ITEM_ORG")
    @JoinColumn(name="ORG_ID")
    private Organization org
}

@Table(name = "ItemA")
public class ItemA extends Item {}

@Table(name = "ItemB")
public class ItemA extends Item {}

HBM2DDL Hibernate создает 2 таблицы для этого отображения: ItemA и ItemB. Оба имеют столбец ORG_ID и внешний ключ к таблице Organization. Однако к каждому внешнему ключу добавлено случайное число (например, FK_ITEM_ORG98343). Как я могу указать, какой внешний ключ использует каждая таблица? Например, я хочу иметь FK_ITEMA_ORG и FK_ITEMB_ORG.

Обновление

Также см. Следующий вопрос: Используется ли аннотация ForeignKey только для создания схемы HBM2DDL?

1 Ответ

2 голосов
/ 16 июля 2011

К сожалению, вы должны удалить аннотацию из поля в основном классе и переместить ее в метод для каждого потомка с указанием имени FK.

Что-то вроде этого:

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
public abstract class Item {
    private Organization  org;
    public Organization getOrg() {
        return org;
    }

}

@Entity
@Table(name = "ItemA")
public class ItemA extends Item {
    @ManyToOne
    @JoinColumn(name="ORG_ID")
    @ForeignKey(name="FK_ITEM_ORG_1")
    public Organization getOrg(){
        return super.getOrg();
    }
}


public class ItemB extends Item{
    @ManyToOne
    @JoinColumn(name="ORG_ID")
    @ForeignKey(name="FK_ITEM_ORG_2")
    public Organization getOrg(){
        return super.getOrg();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...