2016-07-21 3 views
0

Я знаю, что может быть задан этот вопрос раньше, но разница в моем вопросе заключается в том, что я используя расширенный PersistenceUnit, а также я не тот, кто управляет транзакцией, так как сервер отвечает за ее управление. BTW Я использую JPA (2.1) с гибернации (4.3.10) провайдера, PostgreeSQL (9,5) DB и свобода серверorg.hibernate.HibernateException [org.postgresql.util.PSQLException: Большие объекты не могут использоваться в режиме автоматической фиксации.]

Это то, что я получил в браузере enter image description here

А вот мои объекты в простой вид

@Entity 
public class GeoArea{ 
     private Integer id;//Auto Generated 
     private String name; 

     private Set<TourismOrganization> organizations; 

     //getter and setter methods 

     @ManyToMany(mappedBy = "geoAreas") 
     public Set<TourismOrganization> getOrganizations() { 
      return organizations; 
     } 

     public void setOrganizations(Set<TourismOrganization> organizations) { 
      this.organizations = organizations; 
     } 
} 

@Entity 
public class TourismOrganization{ 
     private Integer id;//Auto Generated 
     private String name; 

     private BinaryContent logo; 
     private Set<TourismGeoArea> geoAreas; 

     //other getter and setter methods 

     @ManyToMany 
     public Set<TourismGeoArea> getGeoAreas() { 
      return geoAreas; 
     } 

     public void setGeoAreas(Set<TourismGeoArea> geoAreas) { 
     this.geoAreas = geoAreas; 
     } 

     @OneToOne(fetch = FetchType.EAGER, optional = true, cascade = { CascadeType.REMOVE }, orphanRemoval = true) 
     public BinaryContent getLogo() { 
      return logo; 
     } 

     public void setLogo(BinaryContent logo) { 
      this.logo = logo; 
     } 
} 

@Entity 
public class BinaryContent{ 
    private Integer id;//Auto Generated 
    private String contentType; 

    private byte[] data; 

    //other getter and setter methods 

    @Lob 
    @Column(length = 16000000) // This should generate a medium blob 
    @Basic(fetch = FetchType.LAZY) // I've read this is default, but anyway... 
    public byte[] getData() { 
     return data; 
    } 

    public void setData(byte[] data) { 
     this.data = data; 
    } 

} 

Любая идея, как решить эту проблему при получении организаций в geoArea, используя >> geoArea.organizations на странице xhtml?

Благодаря

ответ

0

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

Кстати мое решение было использовать байт [] без @Lob над его поглотителе так что это будет генерировать столбец в таблице базы данных Postgre быть BYTEA и вместо OID колонка больше

Вот мой код, который я использую сейчас, чтобы избежать Большие объекты не могут использоваться в режиме автоматической фиксации .... исключение, которое было запущено в браузере и не позволило странице работать должным образом

@Entity 
public class BinaryContent{ 
    private Integer id;//Auto Generated 
    private String contentType; 

    private byte[] data; 

    //other getter and setter methods 

    //@Lob >> remember that i am not using it anymore to avoid the exception on the browser 
    @Column(length = 16000000) // This should generate a medium blob 
    @Basic(fetch = FetchType.LAZY) // I've read this is default, but anyway... 
    public byte[] getData() { 
      return data; 
    } 

    public void setData(byte[] data) { 
     this.data = data; 
    } 

} 

Примечание >> U необходимо удалить подъязычная колонки вручную, если он был уже сформирован перед использованием @Lob если вы используете hibernate.hbm2ddl.auto = обновление в вашем persistence.xml, как это будет не поможет обновить столбец из OID быть типа BYTEA и он будет рассматривать подъязычная это хорошо, но что вы можете использовать hibernate.hbm2ddl.auto = создать падение упасть и снова создавать таблицы и это будет генерировать столбец в bytea тип

Смежные вопросы