Public class Parent{
private List child1;
/**
* @hibernate.list inverse="true" lazy="false" cascade="all"
* @hibernate.collection-index column="ID"
* @hibernate.collection-one-to-many
* class="com.test.po.Child"
* @hibernate.collection-key column="parentId"
*/
public List getChild1() {
return child1;
}
public void setChild1(List child1) {
child1= child1;
}
}
Parent.hbm.xml
<list
name="leg"
lazy="false"
inverse="true"
cascade="all"
>
<key
column="ParentId"
>
</key>
<index
column="ID"
/>
<one-to-many
class="com.test.po.Child"
/>
</list>
但用hibernate查询Parent,从而级联查询出child的时,child的数量却比数据库的实际数据多,多的child,都是null。
Query qry = session.createQuery(" From Parent p Where p.id = 1 order by id");//id为Long型
List list = qry.list();
debug的时候,list下的Parent 下的child,数据库实际对应是2条记录,但child在parent中对应的那个list.size()却是3,且第一个就是null,第二三个才是数据库的记录。后经反复测试发现,parent中childList的size()跟child表的id有关,child表的id也是Long,主键策略是native的,childList的size()总是max(child.id)+1,去掉数据库实际的数据条数,其余的都是null。
hibernate3.jar是3.2.1ga 的.数据库是Oracle10g,parent和child表都无sequence。后该主键生成策略为sequence后,也给parent和child建立相应的sequence后,问题依然如此。
不胜感谢
分享到:
相关推荐
本文将探讨Hibernate中两种主要的分页方式:`query.scroll()`和使用`query.setFirstResult(), query.setMaxResults()`。 首先,`query.scroll()`方法基于JDBC 2.0的可滚动结果集实现。这种方式允许应用程序在结果...
public List<Person> queryAll() { String hql = "FROM Person as p"; Query q = this.session.createQuery(hql); return q.list(); } ``` - **模糊查询**:使用 HQL 进行模糊查询。 - **示例代码**: ```...
list = query.list(); System.out.println("查询所有记录:"); this.session.close(); return list; } ``` - **主键查询**: ```java public Login queryById(String name) { Login login = null; String...
Hibernate提供了多种检索数据的方法,包括HQL(Hibernate Query Language)、 Criteria API 和 SQL查询。例如,使用HQL获取所有客户: ```java List<Customer> customers = session.createQuery("from Customer")....
List list = query.list(); HibernateSessionFactory.clossSession(); return (ArrayList) list; } ``` - 基于原生SQL的通用查询: 对于更复杂的SQL操作,可能需要使用原生的SQL语句。这个方法接收一个SQL字符串...
<property name="hibernate.cache.use_query_cache">true <property name="hibernate.ejb.entitymanager_factory_name">hibernateSessionFactory ``` 同时,在实体类中使用 @Type 注解指定自定义类型: ```java @...
List<Student> list = query.list(); ``` 这将查询所有的 Student 对象。 参数绑定 Hibernate 提供了两种参数绑定的方式:?和命名参数。 ? 我们可以使用问号(?)作为参数的占位符,然后使用 `set` 方法将...
List<Admin> list=query.list(); for(Admin admin:list){ System.out.println(admin.getAname()); } }finally{ if(s!=null) s.close(); } } ``` 适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询...
Query q = session.createQuery(hql); q.setString(0, "%" + name + "%"); return q.list(); } ``` 4. **登录验证**: - 实现登录验证可以通过查询用户是否存在来完成。 ```java public UserInfo ...
list = query.list(); // ... } ``` 这里使用了 HQL 查询所有 `Stuinfo` 对象。`"from Stuinfo"` 表示查询 `Stuinfo` 表中的所有记录。`createQuery` 方法接受 HQL 字符串,并返回一个 `Query` 对象,然后调用 `...
List<Customer> customers = query.list(); ``` ##### 4. QBC方式(Query By Criteria) - **定义**:QBC是Hibernate提供的另一种查询方式,基于标准的Java API,提供了更多的灵活性。 - **应用场景**:构建复杂...
List<Person> allPersons = query.list(); ``` - **模糊查询**:使用 `LIKE` 关键字进行模糊匹配。 ```java String hql = "FROM Person WHERE name LIKE ?"; Query query = session.createQuery(hql); query....
4. **查询和遍历**:使用HQL(Hibernate Query Language)或Criteria API来查询List集合,然后遍历结果。 **四、性能优化** 1. **缓存策略**:利用Hibernate的第一级缓存和第二级缓存,减少对数据库的频繁访问。 ...
List<User> users = query.getResultList(); ``` 此外,事务管理在使用Hibernate时至关重要。上述代码中,我们使用了`Transaction`对象来包裹数据库操作,确保了操作的原子性。在大型项目中,这通常会与Spring框架...
本文将深入探讨Hibernate中的几种主要的数据获取方式,包括`Session.get()`与`Session.load()`、`Query.iterator()`与`Query.list()`以及使用HQL(Hibernate Query Language)进行查询。 ### 1. `Session.get()`与`...
List result = query.list(); ``` 完整的分页查询方法实现如下: ```java public List getPageList(int thisNumber, int sumCount, String sql) { Session session = sf.openSession(); try { Query query = ...
List<Cat> cats = query.addEntity(Cat.class).list(); ``` 在上面的代码中,我们使用 `Session.createSQLQuery()` 方法创建了一个 `SQLQuery` 对象,然后使用 `addEntity()` 方法指定了查询结果的实体类型,最后...
List<UserInfo> userList = query.list(); ``` 上面的代码中,`LEFT JOIN FETCH`用于获取`user`表的信息及其对应的`role`信息,其中`WHERE`子句指定了`role`表的`description`字段值。 #### 3. Hibernate批量...
2. HQL(Hibernate Query Language):这是一种面向对象的查询语言,类似于SQL,但更贴近于Java对象。HQL可以方便地进行对象间的关联查询,支持聚合函数和子查询。 3. Query API:这是基于HQL的查询接口,提供了...
Hibernate 的核心功能之一是提供了一套强大的查询接口和方法,包括基于对象的查询、SQL 查询和 HQL (Hibernate Query Language) 查询等。本文将详细介绍 Hibernate 提供的几种查询方式及其应用场景。 #### 二、重要...