エンティティクラス:
public class CustomerSurvey implements Serializable {
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="CUSTOMER_SURVEY_SEQUENCE")
@Column(name = "SURVEYID", nullable = false)
private String surveyId;
@Column(name="ATTACHMENT")
@Lob
private byte[] attachment;
....
永続性クラス/ロジック:
public List<CustomerSurvey> getSurveysByCustomer(String custNo)
throws WorkServiceException {
EntityManager em = entityManagerFactory.createEntityManager();
Query query = em.createNamedQuery("customerSurvey.findByCustomer")
.setParameter("custNo", custNo);
logger.debug(query);
List<CustomerSurvey> surveys = query.getResultList();
em.clear();
em.close();
return surveys;
}
コンシューマークラス/ロジック:
List<CustomerSurvey> reviewSurveys = workService.getSurveysByCustomer("testCNo2");
for(CustomerSurvey rsurvey: reviewSurveys) {
Object obj = rsurvey.getAttachment();
byte[] buffer = (byte[]) obj;
OutputStream out = new FileOutputStream("C:\\Temp\\TulipsOut.jpg");
out.write(buffer);
}
私が得るエラー:
原因:javax.jdo.JDODetachedFieldAccessException:フィールド "attachment"にアクセスしようとしましたが、オブジェクトをデタッチしたときにこのフィールドがデタッチされませんでした。このフィールドにアクセスしないか、オブジェクトをデタッチするときにデタッチしてください。com.ge.dsp.iwork.entity.CustomerSurvey.jdoGetattachment(CustomerSurvey.java)at com.ge.dsp.iwork.entity.CustomerSurvey.getAttachment(CustomerSurvey.java:89)at com.ge.dsp.iwork.test .WorkServiceTest.testSubmitSurveyResponse(WorkServiceTest.java:270)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Delegating :25)orgのjava.lang.reflect.Method.invoke(Method.java:597)で。
ありがとう、