[ 
https://issues.apache.org/cayenne/browse/CAY-1123?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13164#action_13164
 ] 

Andrus Adamchik commented on CAY-1123:
--------------------------------------

no problem if it sits there. It is clear what you were trying to say here.

> Add UUID support
> ----------------
>
>                 Key: CAY-1123
>                 URL: https://issues.apache.org/cayenne/browse/CAY-1123
>             Project: Cayenne
>          Issue Type: New Feature
>         Environment: PostgreSQL
>            Reporter: Artyom Sokolov
>            Assignee: Andrus Adamchik
>         Attachments: UUIDType.java
>
>
> To work properly with PostgreSQL's UUID columnt type I use next class which 
> extends ExtendedType:
> package sandbox.orm.cayenne;
> import java.sql.CallableStatement;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.Types;
> import java.util.UUID;
> import org.apache.cayenne.CayenneRuntimeException;
> import org.apache.cayenne.access.types.ExtendedType;
> import org.apache.cayenne.map.DbAttribute;
> import org.apache.cayenne.validation.ValidationResult;
> public class UUIDType implements ExtendedType {
>       @Override
>       public String getClassName() {
>               return UUID.class.getName();
>       }
>       @Override
>       public Object materializeObject(ResultSet rs, int index, int type)
>                       throws Exception {
>               UUID uuid = null;
>               switch (type) {
>               case Types.NULL:
>                       uuid = null;
>                       break;
>               default:
>                       try {
>                               uuid = 
> UUID.fromString(rs.getObject(index).toString());
>                       } catch (IllegalArgumentException e) {
>                               throw new CayenneRuntimeException(
>                                               "Expected an instance of 
> java.util.UUID, instead got "
>                                                               + 
> uuid.getClass().getName()
>                                                               + ", column 
> index: " + index);
>                       }
>               }
>               return uuid;
>       }
>       @Override
>       public Object materializeObject(CallableStatement rs, int index, int 
> type)
>                       throws Exception {
>               UUID uuid = null;
>               switch (type) {
>               case Types.NULL:
>                       uuid = null;
>                       break;
>               default:
>                       try {
>                               uuid = 
> UUID.fromString(rs.getObject(index).toString());
>                       } catch (IllegalArgumentException e) {
>                               throw new CayenneRuntimeException(
>                                               "Expected an instance of 
> java.util.UUID, instead got "
>                                                               + 
> uuid.getClass().getName()
>                                                               + ", column 
> index: " + index);
>                       }
>               }
>               return uuid;
>       }
>       @Override
>       public void setJdbcObject(PreparedStatement statement, Object value,
>                       int pos, int type, int precision) throws Exception {
>               if (value == null) {
>                       statement.setNull(pos, type);
>               } else if (value instanceof UUID) {
>                       statement.setObject(pos, value);
>               } else {
>                       throw new IllegalArgumentException("Expected 
> java.util.UUID, got "
>                                       + value.getClass().getName());
>               }
>       }
>       @Override
>       public boolean validateProperty(Object source, String property,
>                       Object value, DbAttribute dbAttribute,
>                       ValidationResult validationResult) {
>               return true;
>       }
> }
> Then I register it with 
> Configuration.getSharedConfiguration().getDomain().getNode("MyNode").getAdapter().getExtendedTypes().registerType(new
>  UUIDType());
> Wouldn't it better to have same functionality in Cayenne core?
> Thanks,
> Artyom

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to