相关疑难解决方法(0)

Hibernate 与 Oracle 和 PostgreSQL 的长文本列

我正在尝试让一个实体在 Spring Boot (1.4.4) 应用程序中与 Oracle (11.2) 和 PostgreSQL(9.4) 一起使用。

我的实体包含一个长文本字段(超过 4000 个字符)。Oracle 中适当的数据类型是 CLOB,PostgreSQL 中相应的类型是 TEXT。

我能够让它与 PostgreSQL 一起工作

@Column(name = "LONG_TEXT", columnDefinition="TEXT")
private String longText;
Run Code Online (Sandbox Code Playgroud)

然而,Oracle 在休眠验证阶段会失败,因为 CLOB 需要 @Lob 注释。

以下代码适用于 Oracle

@Lob
@Column(name = "LONG_TEXT")
private String longText;
Run Code Online (Sandbox Code Playgroud)

然而,这次从 PostgreSQL 读取时失败,出现以下异常:

PSQLException:大对象不能在自动提交模式下使用

堆栈溢出建议在事务中执行查询。忽略在选择查询中调用事务的可疑要求,将 @Transactional 添加到查询方法并没有帮助。

任何想法都非常受欢迎。

java oracle postgresql spring hibernate

6
推荐指数
1
解决办法
5328
查看次数

PSQLException:不能在自动提交模式下使用大对象

我正在使用 WildFly 10、Java EE、JPA 和 Hibernate。最近我将我的应用程序从 MySQL 迁移到 PostgreSQL。在使用 MySQL 时,我会使用以下方法将图像存储在我的实体中:

@Lob
@Basic(fetch = FetchType.LAZY)
private byte[] image;
Run Code Online (Sandbox Code Playgroud)

这很好用,MySQL 使用 aLONGBLOB来存储数据。

切换到 PostgreSQL 后,列类型为OID,并且在持久化图像时收到此错误:

Caused by: org.postgresql.util.PSQLException: Large Objects may not be used in auto-commit mode.
at org.postgresql.largeobject.LargeObjectManager.createLO(LargeObjectManager.java:308)
at org.postgresql.largeobject.LargeObjectManager.createLO(LargeObjectManager.java:296)
at org.postgresql.jdbc.PgPreparedStatement.createBlob(PgPreparedStatement.java:1202)
at org.postgresql.jdbc.PgPreparedStatement.setBlob(PgPreparedStatement.java:1243)
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.setBlob(WrappedPreparedStatement.java:1157)
at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$4$1.doBind(BlobTypeDescriptor.java:112)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:73)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:257)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:252)
at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:39)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2598)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2883)
... 131 more
Run Code Online (Sandbox Code Playgroud)

我以这种方式插入:

@PersistenceContext
EntityManager entityManager;

...

//Simple insert method...
this.entityManager.persist(entity);
Run Code Online (Sandbox Code Playgroud)

这是我的persistence.xml

<persistence …
Run Code Online (Sandbox Code Playgroud)

postgresql hibernate jpa wildfly

5
推荐指数
1
解决办法
7905
查看次数

无法写入 JSON:无法访问 lob 流

我正在使用 PostgreSQL 编写带有 Spring-Boot 的服务器,我试图获取有关链接到特定实体的图像的信息。我正在尝试将用户信息从服务器获取到我的前端 Angular 应用程序。在我的系统中,用户有链接到他的帐户的图像,所以我做了 ImageEntity 类

@Entity @Table(name = "image") @Data
public class ImageEntity {
   @Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
   private Long id;
   private String name;
   private String type;
   @Lob
   private byte[] image;

   @JsonIgnore
   public byte[] getImage() {
       return image;
   }
}
Run Code Online (Sandbox Code Playgroud)

然后我将图像列表链接到用户帐户类别

@Entity @Data
public class UserAccount{
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String firstName;
private String lastName

@OneToMany(cascade = CascadeType.ALL)
@JoinTable(
        name = "user_images",
        joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
        inverseJoinColumns = …
Run Code Online (Sandbox Code Playgroud)

java postgresql json blob

1
推荐指数
1
解决办法
5635
查看次数

标签 统计

postgresql ×3

hibernate ×2

java ×2

blob ×1

jpa ×1

json ×1

oracle ×1

spring ×1

wildfly ×1