FAQ
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


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.

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupdev @
categoriescayenne
postedOct 13, '08 at 11:57a
activeOct 13, '08 at 11:57a
posts1
users1
websitecayenne.apache.org

1 user in discussion

Anonymous: 1 post

People

Translate

site design / logo © 2022 Grokbase