Hibernate Blob.getBinaryStream
我正在尝试使用hibernate获取blob流Hibernate Blob.getBinaryStream,hibernate,blob,Hibernate,Blob,我正在尝试使用hibernate获取blob流 public InputStream getMediaData(MediaEntity media) throws SQLException{ media = load(media.getID()); DataBlob blob = media.getData(); Blob blobData = blob.getData(); return blobData.getBinaryStream(); } 但是当调用“
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)
?
媒体实体:
@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;
}
}
这不可能是一个事务问题-但是,您如何管理那里的事务?您在load方法中做什么呢?代码在一个dao类中,它是从一个带有spring的@transactional注释的服务类调用的
@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;
}
}