java - Persisting a member variable in JPA, when only the type is important -


problem: how store field when type important.

description: have simplified problem description highlight issue. class dragon has behavior, roar, stored member variable. roar typically has no state , doesn't need saved. however, dragon needs know specific type of roar has when recreated.

@entity public class dragon implements serializable {     @id     @generatedvalue(strategy = generationtype.auto)     private long id;     private double height;     private roar roar;      public string roar() {         return roar.roar();     } }  public interface roar {     string roar(); }  public class quietroar implements roar {     public string roar() {         return "grr.."; // in real scenario, lots of logic occurs here.  }  public class loudroar implements roar {     public string roar() {         return "ahhhgrrrr";  // more logic here. } 

possible solution: make roar field transient , store additional field of type class holds class type of roar field. dragon class becomes:

@entity public class dragon implements serializable {     @id     @generatedvalue(strategy = generationtype.auto)     private long id;     private double height;     @transient     private roar roar;     private class<? extends roar> roartype;       public void setroar(roar roar) {         this.roar = roar;         roartype = roar.getclass();     }      public string roar() {         if(roar == null) {             try {                 roar = roartype.newinstance();             } catch (instantiationexception | illegalaccessexception ex ) {                 // oo ohh..             }         }         return roar.roar();     } } 

if using eclipselink can use converter this.

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_converter.htm#chdehjeb

specifically can use classinstanceconverter store name of class in column.

jpa 2.1 define converter concept.


Comments

Popular posts from this blog

android - getbluetoothservice() called with no bluetoothmanagercallback -

sql - ASP.NET SqlDataSource, like on SelectCommand -

ios - Undefined symbols for architecture armv7: "_OBJC_CLASS_$_SSZipArchive" -