created JIRA ticket at https://issues.apache.org/jira/browse/IBATIS-628

Has a surprising twist :)

Cheers!

Date: Sun, 23 Aug 2009 22:57:04 -0600
Subject: Re: IBatis 3 backward compatibility
From: clinton.be...@gmail.com
To: user-java@ibatis.apache.org

Sure, that will help.  Can you use HSQLDB instead of MySQL?  That way I can 
include it in the iB3 test if possible.  

I can't imagine how it's working in iB2... LOL... I suppose I should be able to 
at least guess.  :-)


Cheers,
Clinton

On Sun, Aug 23, 2009 at 10:40 PM, I L <iss...@hotmail.com> wrote:






Hi Clinton,

First of all, thank you for your help on this.

I am not seeing a table prefix at all from the result set as you've confirmed. 
But what baffles me is why the binding works in ibatis2 and not 3 if I use 
table prefixes in the result maps. At this stage the best I can do is create a 
JUnit that shows that table prefixing working in IBatis2 and Not 3. Would that 
be of any help to figure it out?


Date: Sun, 23 Aug 2009 21:16:57 -0600
Subject: Re: IBatis 3 backward compatibility
From: clinton.be...@gmail.com

To: user-java@ibatis.apache.org

iBATIS doesn't do anything special in that regard.

And if I remove iBATIS from the mix entirely, I can't even get JDBC to return 
the table prefix with either....


To be clear, there's a difference between an alias:


SELECT id as "my_aliased_id"...

And a table prefix:

SELECT u.id
FROM USER u...

In the latter case, JDBC seems to only return "id" not "u.id", which seems to 
be consistent for years... are you seeing something different using 
rs.getXxxxx(colname)?



Clinton

On Sun, Aug 23, 2009 at 5:32 PM, I L <iss...@hotmail.com> wrote:






Clinton,

You are correct. After more testing, the mysql driver I am using is returning 
the same value for both 

getColumnLabel() and getColumnName(). Both did not return the table prefix.

However, I have another project running ibatis2 that is using the table prefix 
syntax with no issues (e.g. column="user.version"). The bindings are actually 
working.



Does Ibatis2 execute some sort of discovery algorithm that ibatis3 does not? 
Like maybe removing the table prefix before parsing? I am digging through 
ibatis2 code with no luck. As this is the first time I am looking at the code, 
things are looking like Chinese to me.



Thanks for your help!

Date: Sun, 23 Aug 2009 13:52:05 -0600
Subject: Re: IBatis 3 backward compatibility
From: clinton.be...@gmail.com


To: user-java@ibatis.apache.org

Scenario 1 is entirely dependent upon your RDBMS and your JDBC driver... I 
don't believe it works in iBATIS 2 either.  Most JDBC drivers seem to strip the 
table prefix from the column name.  So unfortunately, column aliases are your 
only hope there.  




If you find a JDBC driver that works differently (either for the column name or 
label) I'd love to know, just in case there is a flag or something we can use.  
 

I'll look into Scenario 2 and respond in the JIRA ticket.




Clinton

On Sat, Aug 22, 2009 at 9:10 PM, I L <iss...@hotmail.com> wrote:






Created Jira Ticket with failing JUnit: IBATIS-627

Date: Sat, 22 Aug 2009 19:38:09 -0600

Subject: Re: IBatis 3 backward compatibility
From: clinton.be...@gmail.com
To: user-java@ibatis.apache.org




That's very strange... iBATIS 2 and 3 shouldn't differ in any way there... 

Clinton

On Sat, Aug 22, 2009 at 7:32 PM, I L <iss...@hotmail.com> wrote:









Clinton,

for Scenario 1, I toggled useColumnLabel to true and false with no luck. 
<setting name="useColumnLabel" value="true"/>

If I use user.version instead of just version, I get a null back. Any other 
ideas?





For scenario 2, I will try to get a JUnit for ya in the next hour.

Cheers!

Date: Sat, 22 Aug 2009 18:44:54 -0600
Subject: Re: IBatis 3 backward compatibility
From: clinton.be...@gmail.com




To: user-java@ibatis.apache.org

The first is probably a column name vs. column label issue.  There's a setting 
for that in the Configuration class and the settings element in XML (I believe 
it's called useColumnLabels="true").  iBATIS doesn't do anything special there, 
but the label vs. column default may have changed.






The second case might be a bug, but I'm sure there's a unit test that covers 
that scenario ... I'll check into it.  In the mean time, if you could create a 
JIRA ticket and attach a failing unit test, that would rock.






Cheers,
Clinton



On Sat, Aug 22, 2009 at 5:57 PM, I L <iss...@hotmail.com> wrote:










This is the exception I am getting for scenario 2:

### Error querying database.  Cause: 
org.apache.ibatis.executor.ExecutorException: No type handler could be found to 
map the property 'password' to the column 'PASSWORD'.  One or both of the 
types, or the combination of types is not supported.





### The error may exist in com/test/test/db/config/User.xml
### The error may involve User.UserResult
### The error occurred while handling result set
### SQL: SELECT * FROM user WHERE oid = ?
### Cause: org.apache.ibatis.executor.ExecutorException: No type handler could 
be found to map the property 'password' to the column 'PASSWORD'.  One or both 
of the types, or the combination of types is not supported.





org.apache.ibatis.exceptions.IbatisException: 
### Error querying database.  Cause: 
org.apache.ibatis.executor.ExecutorException: No type handler could be found to 
map the property 'password' to the column 'PASSWORD'.  One or both of the 
types, or the combination of types is not supported.





### The error may exist in com/test/test/db/config/User.xml
### The error may involve User.UserResult
### The error occurred while handling result set
### SQL: SELECT * FROM user WHERE oid = ?
### Cause: org.apache.ibatis.executor.ExecutorException: No type handler could 
be found to map the property 'password' to the column 'PASSWORD'.  One or both 
of the types, or the combination of types is not supported.





    at 
org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
    at 
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:52)
    at 
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:44)





    at 
org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:32)

From: iss...@hotmail.com
To: user-java@ibatis.apache.org





Subject: IBatis 3 backward compatibility
Date: Sat, 22 Aug 2009 23:47:07 +0000








Hi,

I found two scenario's in which used to work in ibatis 2 but no longer works in 
ibatis 3. 

Scenario 1:

In ibatis 2, you could specify the table name and column name:
e.g.
<result column="user.version" jdbcType="INTEGER" property="version" />





In this case the table is "user" and the column is "version"

With Ibatis 3, if I specify the full column name, "user.version", pojo binding 
doesn't occur. I must omit the "user." part to just





<result column="version" jdbcType="INTEGER" property="version" />

The ability to have the fully qualified column name is important when you need 
to distinguish them when both columns are selected from the database.






e.g.
   <result column="user.version" jdbcType="INTEGER" property="version" />
   <result column="place.version" jdbcType="INTEGER" property="version" />






Of course there I could change the column names so they are unique across all 
tables or use aliasing when necessary. But I thought the ibatis 2 approach was 
cleaner

Scenario 2:
In ibatis 2, I used to be able to access a pojo property that is complex:






e.g.
<result column="password" property="password.encrypted" jdbcType="VARCHAR" />

So I had a Field of type Password which had and encrypted member. I only want 
to persist "encrypted"






class Pojo{
  private Password password;
}
class Password{
  private String encrypted; //the encrypted string

  public void getDecryptedString(){...}
}



Windows Live: Make it easier for your friends to see what you’re up to on 
Facebook. Find out more.





Hotmail® is up to 70% faster. Now good news travels really fast.  Try it now.







Windows Live: Keep your friends up to date with what you do online. Find out 
more.






Windows Live: Make it easier for your friends to see what you’re up to on 
Facebook. Find out more.





Windows Live: Make it easier for your friends to see what you’re up to on 
Facebook. Find out more.




With Windows Live, you can organize, edit, and share your photos. Click here.


_________________________________________________________________
Get back to school stuff for them and cashback for you.
http://www.bing.com/cashback?form=MSHYCB&publ=WLHMTAG&crea=TEXT_MSHYCB_BackToSchool_Cashback_BTSCashback_1x1

Reply via email to