の片側を保存するとき。私自身がフォルダを保存しようとすると、患者のIDコレクションのためにLazyInitializationExceptionがスローされます。LazyInitializationException私はIdの収集、およびフォルダのコレクションを持つクラスの患者を持っている関係
Patientクラスは次のようになります。
: その後@Entity
@Table(name = "folder")
public class Folder implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@ManyToOne
@JoinColumn(name = "patient_id", referencedColumnName = "id")
private Patient patient;
}
私は、その後のことを行い、サービスクラスを持っているが、このようなフォルダを保存します。
@Entity
@Table(name = "patient")
public class Patient implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@OneToMany(mappedBy = "patient", fetch = FetchType.LAZY, orphanRemoval = true, cascade = CascadeType.ALL)
private Set<Id> ids = new HashSet<Id>();
@OneToMany(mappedBy = "patient", fetch = FetchType.LAZY, orphanRemoval = true, cascade = CascadeType.ALL)
private List<Folder> folders = new ArrayList<Folder>();
...
}
フォルダのクラスは次のようになります
@Override
@Transactional
public void importData(Data data) {
// do other things
Folder folder = new Folder();
// initialize folder values
...
folder.setPatient(patient);
folderDAO.save(folder);
...
}
そして、それはとFolderDAOにフォルダを保存しようとしたとき:
getHibernateTemplate().saveOrUpdate(folder);
それはスロー:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: es.mycompany.myapp.Patient.ids, could not initialize proxy - no Session
at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:587)
'FetchType.EAGER'に変更してください。 –
これは有効な解決策ではありません。私はメモリを過負荷にしたくないので、患者にロードするたびに大量のデータが含まれているため、すべてのIDをロードしたくありません。 – diminuta
'Hibernate.initialize(folder.getPatient()。getIds());'? –