I am seeing an 'unmanaged object' exception for the objects build using 
@Strategy, but isn't that exactly the point?  These are supposed to be 
unmanaged with the strategy being invoked as necessary for conversion.  I must 
be missing something obvious.  ;-)

> Caused by: <openjpa-2.0.0-beta2-r422266:915978 fatal user error> 
> org.apache.openjpa.persistence.InvalidStateException: Encountered unmanaged 
> object in persistent field "com.example.SimpleEntity.custom" during flush.  
> However, this field does not allow cascade persist. Set the cascade attribute 
> for this field to CascadeType.PERSIST or CascadeType.ALL (JPA annotations) or 
> "persist" or "all" (JPA orm.xml), or enable cascade-persist globally, or 
> manually persist the related field value prior to flushing. You cannot flush 
> unmanaged objects or graphs that have persistent associations to unmanaged 
> objects.
> FailedObject: com.example.mypo...@a431693
>       at 
> org.apache.openjpa.kernel.SingleFieldManager.preFlushPC(SingleFieldManager.java:767)

My entity looks something like this:

> @Entity
> public abstract class SimpleEntity {
>       @Id
>       private long id;
>       public long getId() { return id; }
>       public void setId(long id) { this.id = id; }
>       
>       @Strategy("MyPointHandler")
>       private MyPoint custom;
>       MyPoint getCustom() { return custom; }
>       void setCustom(MyPoint custom) { this. custom = custom; }
> 
>       ...
> }

With a very simple handler class:

> public class MyPointHandler extends AbstractValueHandler {
>     @Override
>     public Column[] map(ValueMapping vm, String name, ColumnIO io, boolean 
> adapt) {
>         Column c = new Column();
>         c.setIdentifier(DBIdentifier.newColumn(name));
>         c.setJavaType(JavaTypes.STRING);
>         return new Column[]{ c };
>     }
> 
>     public boolean isVersionable() {
>         return true;
>     }
> 
>     public Object toDataStoreValue(ValueMapping vm, Object val, JDBCStore 
> store) {
>         return new MyPoint((String) val);
>     }
>     
>     public Object toObjectValue(ValueMapping vm, Object val) {
>       if (val == null) return null;
>       return ((MyPoint) val).getValue();
>     }
> }

I've used the PointHandler from the OpenJPA tests as a model.

Reply via email to