Подтвердить что ты не робот

Org.hibernate.nnotes против javax.persistence

Неплохо ли использовать аннотации из

пакет javax.persistence

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

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

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

4b9b3361

Ответ 1

Довольно oppsite.

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

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

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

Ответ 2

Другие минусы в:

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 save приведет к действию ACTION_SAVE_UPDATE, но JPA передаст ACTION_PERSIST и ACTION_MERGE, он не будет соответствовать и не сможет выполнить каскад.

Ответ 3

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

Ответ 4

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

class Foo {
     @OneToMany( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
     @Cascade(org.hibernate.annotations.CascadeType.REPLICATE)
     public Collection<Employer> getEmployers()
...
}