org.hibernate.annotations против javax.persistence - PullRequest
51 голосов
/ 31 марта 2009

Это плохая идея использовать аннотации из

пакет javax.persistence

вместо использования

org.hibernate.annotations аннотации

Я знаю, что использование javax.peristence вводит еще одну зависимость. Но если я проигнорирую это, каковы плюсы / минусы?

Ответы [ 4 ]

69 голосов
/ 31 марта 2009

Совсем наоборот.

Hibernate является реализацией Java Persistence API, и, где это возможно, вы должны использовать стандартные аннотации (в javax.persistence). Таким образом, вы можете теоретически запустить свой код в других реализациях JPA.

Только когда вам нужны специальные функции Hibernate, вы должны использовать аннотации Hibernate.

Дополнительная зависимость есть только для файлов jar интерфейса / аннотации JPA и очень легкая.

6 голосов
/ 17 июля 2013

Еще минусы в:

http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/

где это:

@OneToMany(fetch = FetchType.LAZY, 
  cascade = {CascadeType.PERSIST,CascadeType.MERGE }, 
  mappedBy = "stock")
public Set<StockDailyRecord> getStockDailyRecords() {
    return this.stockDailyRecords;
}

с этим:

stockDailyRecords.setStock(stock);        
stock.getStockDailyRecords().add(stockDailyRecords);

session.save(stock);
session.getTransaction().commit();

не будет работать, так как @OneToMany от JPA, ожидается каскад JPA - javax.persistence.CascadeType. Однако при сохранении в сеансе Hibernate org.hibernate.engine.Cascade выполнит следующую проверку:

if ( style.doCascade( action ) ) {

и процесс сохранения Hibernate будет вызывать действие ACTION_SAVE_UPDATE, но JPA пропустит ACTION_PERSIST и ACTION_MERGE, не совпадет и приведет к сбою каскада.

2 голосов
/ 14 декабря 2009

Я использовал javax.persistence аннотацию, и когда я заменил Tomcat 6.0 на свою Glass Fish, тогда Tomcat 6.0 включил еще один пакет javax.persistence, который все испортил. Я не думаю, что это хорошая идея использовать javax.persistence аннотацию. Бог знает, что, черт возьми, случилось с Tomcat и javax.persistence!

0 голосов
/ 06 сентября 2013

Официально рекомендуется смешивать аннотации JPA и Hibernate в случае установки параметров каскадирования, см. Hibernate документы. 2.4.7. Cascade . Если вы используете только аннотации JPA, в случае однонаправленного отображения (нет поля типа Foo в Employer.java) вы все равно получаете «не удается сохранить временный объект Employer» в сеансе вызова. Cure использует @Cascade в стиле hibernate вместе с cascade = {...}:

class Foo {
     @OneToMany( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
     @Cascade(org.hibernate.annotations.CascadeType.REPLICATE)
     public Collection<Employer> getEmployers()
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...