Определение независимого от базы данных объекта JPA uid - PullRequest
2 голосов
/ 04 августа 2010

Оказывается, что следующий пример работает при использовании mysql 5.x, но не при использовании базы данных oracle 10g.

Есть ли способ определить поле уникального идентификатора, которое не зависит оттехнология базы данных?

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private long id;

Я проверил это в спящем режиме, и следующее исключение возникает только при использовании Oracle:

org.hibernate.MappingException: Dialect does not support identity key generation

Ответы [ 2 ]

4 голосов
/ 04 августа 2010

Использование таблицы базы данных - это портативный способ генерации идентификаторов.

Самый простой способ использовать таблицу для генерации идентификаторов - указать TABLE в качестве стратегии генерации:

@Id
@GeneratedValue(strategy=GenerationType.TABLE)
@Column(name="id")
private long id;

Поставщик создаст таблицу по умолчанию, если вы используете генерацию схемы; если нет, вы должны указать существующую таблицу:

@TableGenerator(name="InvTab",
    table="ID_GEN",
    pkColumnName="ID_NAME",
    valueColumnName="ID_VAL",
    pkColumnValue="INV_GEN")
@Id 
@GeneratedValue(generator="InvTab")
@Column(name="id")
private long id;

http://www.oracle.com/technology/products/ias/toplink/jpa/howto/id-generation.html#table

0 голосов
/ 07 августа 2010

Я исследовал, используя GenerationType.AUTO, и это, кажется, лучший вариант.Это позволяет реализации JPA выбирать то, что лучше для используемой вами системы хранения данных.

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