Hello all,
I don't even know if this is the right place to post this. I have been trying to insert images in a oid column of postgreSQL table. I could somehow manage to use s:fileUpload to read the content into an input stream. But whenever I try em.persist(), an exception occurs saying that Blob cannot be manipulated from creating a session.
I googled this exception, but nothing turned up. The Hibernate site had a solution but it was for session object where they seem to open a transaction. Hibernate doc seems to be confusing in that they say the @PersistenceContext should do all transaction work when using JTA. But still the exception occurs.
Here's my Entity
@Entity
public class TestNode implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
long id;
@Column
String fileName;
@Lob
Blob image;
///Getters and setters
And here is my seam code
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public String upload() {
TestNode tmp \= new TestNode();
try {
tmp.setFileName(fileName);
tmp.setImage(Hibernate.createBlob(localStream));
entityManager.refresh(tmp);
entityManager.persist(tmp);
FacesMessages.instance().add("Uploaded.");
}
catch (Exception e) {
e.printStackTrace();
FacesMessages.instance().add("Failed.");
}
return "/test.seam";
}
This class is annotated as @Stateful and @Name("TestUpload")
Am I doing something wrong? How to open a new transaction as it is opened in Hibernate?