Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to re-attach an object to EclipseLink session after deserialization
    text
    copied!<p>Here's a simple POC:</p> <pre><code>public void main(String[] args) { final String FILE_NAME = "c:/poc.ser"; try { HotelJdo hotel = HotelJdoFinder.findById(430); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME)); // serialize the object oos.writeObject(hotel); oos.close(); // read the object in the same vm ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME)); HotelJdo hotel2 = (HotelJdo) ois.readObject(); // this line throws an exception System.out.println("number of crs channels: " + hotel2.getAvailableRooms().size()); ois.close(); } catch (Exception e) { System.out.println("Unexpected exception:"); e.printStackTrace(); } } </code></pre> <p>hotel2.getAvailableRooms() queries list of rooms that configured to use transparent indirection. And that call throws the following exception:</p> <pre><code>Exception [EclipseLink-7242] (Eclipse Persistence Services - 1.2.1.v20100428-r70 82): org.eclipse.persistence.exceptions.ValidationException Exception Description: An attempt was made to traverse a relationship using indi rection that had a null Session. This often occurs when an entity with an unins tantiated LAZY relationship is serialized and that lazy relationship is traverse d after serialization. To avoid this issue, instantiate the LAZY relationship p rior to serialization. at org.eclipse.persistence.exceptions.ValidationException.instantiatingV alueholderWithNullSession(ValidationException.java:975) at org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.in stantiate(QueryBasedValueHolder.java:83) at org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.in stantiate(QueryBasedValueHolder.java:75) at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getV alue(DatabaseValueHolder.java:83) at org.eclipse.persistence.indirection.IndirectList.buildDelegate(Indire ctList.java:237) at org.eclipse.persistence.indirection.IndirectList.getDelegate(Indirect List.java:397) at org.eclipse.persistence.indirection.IndirectList.size(IndirectList.ja va:726) </code></pre> <p>I understand that I can just trigger initialization of room list before serialization but I wonder how can I re-attach hotel2 object to EclipseLink session in order to get the list of room lazily.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload