ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hett <hetthat...@gmail.com>
Subject RE: TypeHandler UUID
Date Wed, 21 Feb 2007 20:03:08 GMT

There is no error, the only error I get is a null exception when I try to
println(p.getId) because p is null.
I follow the link you provided and used log4j to capture the generate query.

This is what it output when I use type String I mention earlier:
Same code, just different object(also changed the parameter of the dbAccess
to accept a String instead of UUID):
     DBAccess<Activity> ac = new DBAccess<Activity>();
     Activity a = ac.getObjectById("getActivityById", "10028");
     System.out.println(a.getProjectId());


DEBUG [main] - {pstm-100001} Executing Statement:      SELECT           *    
FROM activity     WHERE activity_id = ?   
DEBUG [main] - {pstm-100001} Parameters: [10028]
DEBUG [main] - {pstm-100001} Types: [java.lang.String]
DEBUG [main] - {rset-100002} ResultSet
DEBUG [main] - {rset-100002} Header: [activity_id, activity_type,
planned_date, short_text, description, actual_date, person_id, project_id]
DEBUG [main] - {rset-100002} Result: [10028, Meeting, null, Meet them, Meet
to discuss the discussion, null, null, 10022]
DEBUG [main] - Returned connection 3916375 to pool.
10022 //<---result


and this is the output when I used UUID:

DEBUG [main] - Created connection 3154093.
DEBUG [main] - {conn-100000} Connection
DEBUG [main] - {conn-100000} Preparing Statement:      SELECT           *    
FROM person     WHERE person_id = ?   
DEBUG [main] - {pstm-100001} Executing Statement:      SELECT           *    
FROM person     WHERE person_id = ?   
DEBUG [main] - {pstm-100001} Parameters:
[a26a19f6-18c4-4ba0-84bb-6ead12b4cb8d]
DEBUG [main] - {pstm-100001} Types: [java.lang.String]
DEBUG [main] - {rset-100002} ResultSet
DEBUG [main] - Returned connection 3154093 to pool.
Exception in thread "main" java.lang.NullPointerException
	at
edu.neumont.ca_labs.project_tracking.testing.ActivityTester.main(ActivityTester.java:24)
//this error occurs when I tried to print the id of the person.

I am about to give up on this, I think I will just store the UUID as a
string in the objects class, but please point out if you see a problem.


Niels Beekman-2 wrote:
> 
> I meant iBATIS logging, see
> http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+g
> et+SqlMapClient+to+log+SQL+statements for instructions.
> 
> You should gracefully handle your SQLExceptions, but for now try
> printing your "this.error" variable to see if an error occurred. Also,
> make sure that any RuntimeExceptions don't get swallowed by the code
> that calls DBAccess.getObjectById().
> 
> Niels
> 
> -----Original Message-----
> From: hett [mailto:hetthatroi@gmail.com] 
> Sent: woensdag 21 februari 2007 17:41
> To: user-java@ibatis.apache.org
> Subject: RE: TypeHandler UUID
> 
> 
> Thanks for the quick reply, I just learned java for a few weeks, still
> trying
> to get use to eclipse, can you show me how to enable debug logging to
> see
> the generate query?
> 
> here is my dbAccess method using generic:
> public T getObjectById(String query, UUID id) {
> 		T rObject = null;
> 		// reset the error
> 		this.error = "";
> 		try {
> 			rObject = (T)sqlMap.queryForObject(query, id);
> 		} catch (SQLException e) {
> 			// System.out.println(e);
> 			this.error = e.getMessage();
> 		}
> 		return rObject;
> 	}
> 
> and here is my testing code:
> 
> 
> DBAccess<Person> ac = new DBAccess<Person>();
> Person p = ac.getObjectById("getPersonById",
> UUID.fromString("A26A19F6-18C4-4ba0-84BB-6EAD12B4CB8D"));
> System.out.println(p.getId());
> 
> I have tested my DBAccess with a different object using the String type
> and
> I got data back, so I don't think it's my DBAccess code is the problem.
> 
> 
> Niels Beekman-2 wrote:
>> 
>> Try to enable debug logging and see if you get results when you
> manually
>> execute the generated query. getResult() should definitely be called,
> so
>> I think it's either a bug in your setParameter() or the query is
> wrong.
>> Could you post your calling Java code too?
>> 
>> Niels
>> 
>> -----Original Message-----
>> From: hett [mailto:hetthatroi@gmail.com] 
>> Sent: woensdag 21 februari 2007 15:53
>> To: user-java@ibatis.apache.org
>> Subject: RE: TypeHandler UUID
>> 
>> 
>> getResult() is not being called at all, but it does went to
>> setParameter().
>> This is what I have in my resultmap
>> 
>> <sqlMap namespace="Person">
>> 
>>   <typeAlias alias="person" type="domain.Person"/>  
>> 
>>   <resultMap id="get-all" class="person">
>> 	<result property="id" column="person_id"
>> typeHandler="domain.UUIDTypeHandler"/>
>>   </resultMap>
>> 
>>   <select id="getPersonById" resultMap="get-all"
>> parameterClass="java.util.UUID">
>>     SELECT
>>           *
>>     FROM person
>>     WHERE person_id=#value#
>>   </select>
>> 
>> </sqlMap>
>> 
>> 
>> Niels Beekman-2 wrote:
>>> 
>>> Hi,
>>> 
>>> Is getResult() being called? If not, try adding an explicit
>>> javaType="java.util.UUID" to the resultmap.
>>> 
>>> If I may suggest an optimization: replace getter.getObject() == null
>>> with getter.wasNull().
>>> 
>>> Niels
>>> 
>>> -----Original Message-----
>>> From: hett [mailto:hetthatroi@gmail.com] 
>>> Sent: woensdag 21 februari 2007 1:15
>>> To: user-java@ibatis.apache.org
>>> Subject: TypeHandler UUID
>>> 
>>> 
>>> Hi, I am working with a db that doesn't support UUID, so we specify
>> the
>>> id
>>> column in the db as an nvarchar(36).  I follow this example
>>>
>>
> http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+u
>>>
>>
> se+a+Custom+Type+Handler+with+complex+property+or+Type+Safe+Enumeration
>>> and created my TypeHandler.
>>> 
>>> In my person class, I have the following:
>>> 
>>> public class Person {
>>> 	UUID id;
>>>                 //get and set method...
>>> }
>>> 
>>> and in UUIDTypeHandler:
>>> 
>>> public class UUIDTypeHandler implements TypeHandlerCallback{
>>> 
>>> 	public Object getResult(ResultGetter getter) throws SQLException
>>> {
>>> 		String value = getter.getString();
>>> 		if(getter.getObject() == null){
>>> 			return null;
>>> 		}
>>> 		UUID uuid = UUID.fromString(value);
>>> 		return uuid;
>>> 	}
>>> 
>>> 	public void setParameter(ParameterSetter setter, Object
>>> parameter) throws
>>> SQLException {
>>> 		if(parameter == null){
>>> 			setter.setNull(Types.VARCHAR);
>>> 		}else{
>>> 			UUID uuid = (UUID) parameter;
>>> 			//System.out.println(uuid.toString());
>>> 			setter.setString(uuid.toString());
>>> 		}
>>> 	}
>>> 
>>> 	public Object valueOf(String s) {
>>> 		return s;
>>> 	}
>>> }
>>> 
>>> in the sqlmapconfig I added this:
>>> <typeHandler javaType="java.util.UUID"
>>> callback="domain.UUIDTypeHandler"/>
>>> 
>>> I tried to do a select query, but the result is always null, is there
>>> something else I am missing?
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/TypeHandler-UUID-tf3264136.html#a9073293
>>> Sent from the iBATIS - User - Java mailing list archive at
> Nabble.com.
>>> 
>>> 
>>> 
>> 
>> -- 
>> View this message in context:
>> http://www.nabble.com/TypeHandler-UUID-tf3264136.html#a9082175
>> Sent from the iBATIS - User - Java mailing list archive at Nabble.com.
>> 
>> 
>> 
> 
> -- 
> View this message in context:
> http://www.nabble.com/TypeHandler-UUID-tf3264136.html#a9084307
> Sent from the iBATIS - User - Java mailing list archive at Nabble.com.
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/TypeHandler-UUID-tf3264136.html#a9088070
Sent from the iBATIS - User - Java mailing list archive at Nabble.com.


Mime
View raw message