3

我正在尝试使用休眠模式获取 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;
}

}
4

0 回答 0