The CreateQuery and Createsqlquery of hibernate

Source: Internet
Author: User

Info: java.lang.ClassCastException: [Ljava.lang.Object; cannot is cast to Com.miracle.dm.doc.catalog.model.UserInfo

The original query statement:

String sql = "Select a.* from Tb_user_info a where a.cat_code like '" +catcode+ "% '";
Session session = This.getsession ();
try {
List catnamelist = session.createsqlquery (SQL). List ();
return catnamelist;
} finally {
Releasesession (session); Release session
}

Analysis: Fields that were originally queried are not automatically converted to bean objects.

Solution one (using HQL query):

String sql = "Select a from UserInfo a where a.catcode like '" +catcode+ "% '";
List catnamelist =gethibernatetemplate (). find (SQL);
return catnamelist;
OK, test to find no problem, it seems still because of the original SQL query reason, search online: Createsqlquery returned to the object, saw an article only to realize:

Solution two (using native SQL query):

String sql = "Select a.* from Tb_user_info a where a.cat_code like '" +catcode+ "% '";
Session session = This.getsession ();
try {
List catnamelist = session.createsqlquery (sql). Addentity (Userinfo.class). List ();
return catnamelist;
} finally {
Releasesession (session); Release session
}

It's OK again.

The difference between CreateQuery and Createsqlquery in Hibernate is:
The former uses the HQL statement to query, the latter can use the SQL statement query
The former takes the bean generated by hibernate as the object to load the list back
The latter is stored as an array of objects
So it's not very convenient to use createsqlquery and sometimes want to load the list back with hibernate-generated beans.
Suddenly discovered that Createsqlquery had a way to convert objects directly
Query query = session.createsqlquery (SQL). addentity (Xxxxxxx.class);
XXXXXXX represents the object of the bean generated by hibernate, which is the bean that the data table maps out.
Hehe after more attention, or from time to time to see the use of various methods hibernate object.

There is another minor detail that should be noted:
For example, there is such a PO
PO:User.class
Properties:userid,username
Ddl:create table Tuser (userid varchar), username varchar (20));
When executing:
Session.createquery ("From User U"). The SQL generated when list ():
Select Userid,username from Tuser;
When executing:

session.createquery ("from User U"). SQL generated when iterator ():

Select UserID from Tuser;

can see that list () reads data from the database one time directly into List

iterator () reads the primary key of the data from the database and adds execution when looping the iterator:

Select Userid,username from user where userid=?; read out the data. The
uses different methods for different application areas, which should be noted in hibernate applications.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.