我正在尝试使用休眠模式获取 blob 流
public InputStream getMediaData(MediaEntity media) throws SQLException{
media = load(media.getID());
DataBlob blob = media.getData();
Blob blobData = blob.getData();
return blobData.getBinaryStream();
}
但是当调用“getBinaryStream”时它会抛出
org.postgresql.util.PSQLException: This connection has been closed.
at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:714)
at org.postgresql.jdbc2.AbstractJdbc2Connection.getAutoCommit(AbstractJdbc2Connection.java:680)
at org.postgresql.fastpath.Fastpath.fastpath(Fastpath.java:74)
at org.postgresql.fastpath.Fastpath.fastpath(Fastpath.java:114)
at org.postgresql.fastpath.Fastpath.getInteger(Fastpath.java:126)
at org.postgresql.largeobject.LargeObject.<init>(LargeObject.java:93)
at org.postgresql.largeobject.LargeObject.copy(LargeObject.java:98)
at org.postgresql.jdbc2.AbstractJdbc2BlobClob.getBinaryStream(AbstractJdbc2BlobClob.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.engine.jdbc.SerializableBlobProxy.invoke(SerializableBlobProxy.java:73)
但这不可能是交易问题,它是相同的功能
有任何想法吗?
还是他尝试使用在执行此操作时处于活动状态的连接
LobCreator lobCreator = Hibernate.getLobCreator(session);
Blob blob = lobCreator.createBlob(input, media.getLength());
?
媒体:
@Entity
public class MediaEntity {
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.AUTO)
private Long mediaID;
@ManyToOne(cascade = CascadeType.ALL)
DataBlob data;
long length;
public Long getMediaID() {
return mediaID;
}
public void setMediaID(Long mediaID) {
this.mediaID = mediaID;
}
public DataBlob getData() {
return data;
}
public void setData(DataBlob data) {
this.data = data;
}
public long getLength() {
return length;
}
public void setLength(long length) {
this.length = length;
}
}
数据块:
@Entity
public class DataBlob {
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Lob
private Blob data;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Blob getData() {
return data;
}
public void setData(Blob data) {
this.data = data;
}
}