Установка первичного ключа подкласса как auto_increment с использованием аннотаций JPA 2 - PullRequest
1 голос
/ 27 июля 2010

Я пытаюсь сгенерировать схему базы данных для моего проекта, используя hbm2ddl.Я использую аннотации JPA 2, чтобы указать, как должна выглядеть схема.Сейчас у меня есть некоторые проблемы с унаследованными идентификаторами.

У меня есть абстрактный суперкласс, назовем его AbstractSuperClass, который выглядит следующим образом:

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractSuperClass {
    ...
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
    }
    ...
}

Я установил идентификаторбыть автоматически сгенерированным значением, которое переводится в ограничение auto_increment в SQL.Однако, когда я смотрю на сгенерированный скрипт, я не вижу столбцов id таблиц подклассов, в которых есть auto_increment.

У кого-нибудь есть идеи, как мне это получить?Конечно, я мог бы указать это вручную, но, насколько это возможно, я хочу, чтобы он был автоматизирован.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 28 июля 2010

Не поддерживается, как указано в Справочной документации в разделе о отображении наследования:

2.2.4.1. Таблица на класс

У этой стратегии много недостатков (особенно с полиморфными запросами и ассоциации) объяснил в JPA спецификация, ссылка на Hibernate документация, Hibernate в действии, и много других мест. Спящая работа вокруг большинства из них реализуют это стратегия с использованием запросов SQL UNION. Это обычно используется для верхнего уровня иерархия наследования:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable { ... }            

Эта стратегия поддерживает один ко многим ассоциации при условии, что они двунаправленный. Эта стратегия делает не поддерживает генератор IDENTITY стратегия: идентификатор должен быть разделен через несколько столов. Как следствие, при использовании этой стратегии, вы должны не используйте ни AUTO, ни IDENTITY .

0 голосов
/ 02 января 2011

Для справки, парень спрашивает, как auto_increment он идентифицирует столбцы, используя аннотации JPA 2.

Чувак, просто объяви стратегию = GenerationType.IDENTITY в своей аннотации @GeneratedValue. например :

@Id  
@GeneratedValue(strategy=GenerationType.IDENTITY)  

Защищено долго в любом месте;

Надеюсь, это поможет вам.

0 голосов
/ 27 июля 2010

Обратите внимание, что GenerationType.AUTO означает, что провайдер настойчивости должен выбрать стратегию генерации. Вы пробовали более конкретное значение?

...