Hibernate 1+n问题

问题简述

4个类Category ,topic ,msg,msginfo。都是多对一的关系
一个模块下面有多个主题,一条主题下面有多条消息。
获取topic时,把topic有导航关系的数据全部取出来

解决办法

  1. 把fetchtapy设置为lazy,需要在发出。(不用使用关联对象的情况下使用)
@ManyToOne(fetch=FetchType.LAZY)
	public Category getCategory() {
		return category;
	}
  1. 使用@batchSize(size=5),在获取数据时一次发出5条。如果设置10,则就发一次就可以了。但是不灵活。
package com.hibernate.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.BatchSize;

@Entity
@BatchSize(size=5)
public class Category {
	private int id;
	...
	}
  1. 使用join fetch,建立外连接(使用关联对象)
public void testQuery(){
		Session session = sf.openSession();
		session.beginTransaction();
		//这里使用的时t.category而不是Categogy,是因为
		//假设topic中设置了一个Categogy类型的其他字段,将会发生冲突。
		List<Topic> topics = (List<Topic>) session.createQuery("from Topic t left join fetch t.category c").list();
		
		for(Topic t:topics){
			System.out.println(t.getId()+"-"+t.getTitle());
			
		}
		
		
		session.getTransaction().commit();
		session.close();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值