`
lanxiangbo
  • 浏览: 6175 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于注解自身OneToMany

    博客分类:
  • SSH2
阅读更多
直接看代码:
package net.mai123.bean;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="TYPE_INF")
public class TypeInf {
	@Id
	@Column(name="TYPE_ID")
	private int    typeId;
	
	@Column(name="TYPE_NAME")
	private String typeName;
	

	@Column(name="PARENT_ID")
	private int parentId;
	
	@OneToMany(targetEntity=TypeInf.class)
	@JoinColumn(name="PARENT_ID")
	private List<TypeInf>  childrens;
	
	@Column(name="SHOWABLE")
	private int    showAble;
	
	@Column(name="REMARK")
	private String remark;
	public int getTypeId() {
		return typeId;
	}
	/************* 省略掉setter和getter **************/
}


对应的数据库表结构
DROP TABLE IF EXISTS TYPE_INF;
CREATE TABLE TYPE_INF(
	TYPE_ID   INT AUTO_INCREMENT PRIMARY KEY,
	TYPE_NAME VARCHAR(40),
	PARENT_ID INT,
	SHOWABLE  INT DEFAULT 0,
	REMARK    VARCHAR(400)
);

DAO类
package net.mai123.dao.impl;

import java.util.List;

import net.mai123.bean.TypeInf;

public class TypeInfDao extends CommonDao<TypeInf> {

	/************* 省略掉无关的代码 **************/

	@SuppressWarnings("unchecked")
	public List<TypeInf> doQuery() {
		//加上select distinct是为了去除重复的parent
		//left join fetch 可以不延迟加载
		List<TypeInf> lst = find("select distinct t from TypeInf t left join fetch t.childrens where t.parentId=0");
		for(TypeInf t : lst){
			System.out.println(t.getTypeName()+":"+t.getChildrens().size());
		}
		return lst;
	}

	
}


这样就OK乐。。看下打印的SQL和结果
Hibernate: 
    select
        distinct typeinf0_.TYPE_ID as TYPE1_1_0_,
        childrens1_.TYPE_ID as TYPE1_1_1_,
        typeinf0_.PARENT_ID as PARENT2_1_0_,
        typeinf0_.REMARK as REMARK1_0_,
        typeinf0_.SHOWABLE as SHOWABLE1_0_,
        typeinf0_.TYPE_NAME as TYPE5_1_0_,
        childrens1_.PARENT_ID as PARENT2_1_1_,
        childrens1_.REMARK as REMARK1_1_,
        childrens1_.SHOWABLE as SHOWABLE1_1_,
        childrens1_.TYPE_NAME as TYPE5_1_1_,
        childrens1_.PARENT_ID as PARENT2_0__,
        childrens1_.TYPE_ID as TYPE1_0__ 
    from
        TYPE_INF typeinf0_ 
    left outer join
        TYPE_INF childrens1_ 
            on typeinf0_.TYPE_ID=childrens1_.PARENT_ID 
    where
        typeinf0_.PARENT_ID=0

家具/日用品:6
二手笔记本:13
电子数码:6
图书/音乐/运动 :5
家用电器:9
台式电脑/网络:4
服饰/箱包/化妆品:6
商用/办公:4
闲置礼品:3
手机/通讯相关:5
母婴/儿童用品:5


好了。。childrens加载进来了。。而且也parent也不会重复。。。
搞了半天。。哎
分享到:
评论

相关推荐

    JPA_OneToMany学习教程

    对于OneToMany关系,我们需要在父实体上使用@OneToMany注解,并在子实体上使用@ManyToOne注解来建立双向关联。 3. **@OneToMany注解**:此注解包含几个重要的属性,如`mappedBy`、`fetch`和`cascade`。`mappedBy`...

    一个基于注解的SSH框架的登录功能实现

    同时,`@OneToMany`、`@ManyToOne`、`@ManyToMany`等注解用于处理多对一、一对多和多对多的关系。 在登录功能的实现中,通常会有以下步骤: 1. **用户输入验证**:用户在前端页面填写用户名和密码,提交到Struts2...

    Eclipse基于注解方式搭建ssh框架

    "Eclipse基于注解方式搭建SSH框架"项目展示了如何在Eclipse环境中利用注解驱动的方式集成Struts2、Spring和Hibernate,实现了一个包含注册功能的Web应用。项目中使用了JPA注解简化了数据库交互,并通过数据库脚本...

    HIBERNATE 一对多 onetomany

    在Hibernate中,这种关系可以通过在实体类中定义`@OneToMany`注解来表示。 **配置实体类** 1. **父实体类**:在这个关系中,"一"端的实体称为父实体。例如,我们用`Student`作为父实体,它有一对多的课程关联。在`...

    基于全注解的ssh完整例子

    这个基于全注解的SSH完整例子旨在帮助开发者快速理解和掌握这三大框架的集成与应用。 Struts是MVC(Model-View-Controller)设计模式的一个实现,主要用于处理用户的请求并控制应用程序流程。在全注解的配置下,...

    onetomany-hibernate

    `,并使用`@OneToMany`注解来标注这个属性,指定关联的子类以及其他的配置选项,如级联操作、fetch模式等。 接下来,你需要在映射文件(XML或使用注解)中配置这个关系。如果使用XML映射,会在父类的映射文件中添加...

    基于注解ssh的通用dao的crud

    此外,`@OneToMany`, `@ManyToOne`, `@OneToOne`, 和`@ManyToMany`等注解用于描述实体之间的关联关系。对于DAO层,Hibernate提供了一套基于注解的CRUD接口,如`@Transactional`确保操作的事务性,`@Query`可以编写...

    基于注解的spring+hibernate+struts2源码.rar

    同时,`@ManyToOne`、`@OneToOne`、`@OneToMany`和`@ManyToMany`等注解用于定义关联关系。此外,`@Column`用于定义字段与列的对应,`@GeneratedValue`可以配合`@SequenceGenerator`进行序列化主键生成。 三、Struts...

    基于注解的springMVC+hibernate+oracle包含数据库查询

    此外,`@GeneratedValue`用于指定主键生成策略,`@OneToMany`、`@ManyToOne`等注解用于建立关联关系。 Oracle数据库是广泛使用的商业关系型数据库系统,具备高可用性、高性能和丰富的功能。在SpringMVC和Hibernate...

    基于注解的关联关系Hibernate

    在这个“基于注解的关联关系Hibernate”的主题中,我们将深入探讨如何使用Hibernate的注解来配置不同类型的关联关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-...

    ssh代码整合基于注解方式的

    压缩包中的"SSH(基于注解)"可能包含了这样一个完整的示例项目,包括Struts2的Action、Spring的配置、Hibernate的实体类以及相应的整合配置。通过对这些文件的分析和学习,可以更好地理解SSH的注解整合方式。 总结,...

    基于注解式的ssh2人力资源系统

    而`@OneToMany`、`@ManyToOne`等注解则定义了对象之间的关联关系。同时,`@Transactional`注解与Spring的事务管理结合,确保数据操作的原子性。 4. **数据库设计**:由于是人力资源管理系统,数据库设计通常包括...

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    在Order实体中,@ManyToOne注解表示多的一方,而User实体中@OneToMany表示一的一方。mappedBy属性表明Order实体是关系的拥有者。 四、多对多(ManyToMany)关系映射 多对多关系是最复杂的关系类型,表示两个实体...

    基于注解式的ssh2考试系统

    同时,`@OneToMany`、`@ManyToOne`、`@ManyToMany`等注解处理关联关系。 4. **前端校验** 考试系统的前端校验确保了用户输入的有效性,减少了服务器端的负担。Struts2提供了丰富的验证框架,可以结合JSR303/JSR349...

    Hibernate- oneToMany using annotation

    在Java的持久化框架Hibernate中,`@OneToMany`注解是用于表示一对多关系的,这种关系常见于数据库设计中的父表与子表之间。在这个主题中,我们将深入探讨如何在实体类中使用`@OneToMany`注解以及其在实际项目中的...

    基于注解的ssh可运行完整程序

    Hibernate的注解如`@Entity`定义实体类,`@Table`指定数据库表名,`@Id`定义主键,`@GeneratedValue`生成主键值,`@ManyToOne`、`@OneToMany`等定义关联关系。这些注解使得数据库模型的定义更加直观,无需编写复杂的...

    基于注解的spring3+hibernate3的springMVC框架

    `@ManyToOne`, `@OneToMany`, `@OneToOne` 和 `@ManyToMany`注解用于建立对象之间的关系。 **SpringMVC** SpringMVC是Spring框架的一部分,专门负责处理HTTP请求和响应。通过`@RequestMapping`注解,我们可以将特定...

    基于注解的spring+hibernate+struts2.rar

    此外,`@OneToMany`、`@ManyToOne`等注解用于定义对象间的关联关系。 3. **Struts2框架**:Struts2是MVC设计模式的实现,它负责处理用户界面与业务逻辑之间的交互。`@Action`注解标记控制器类或方法,`@Result`定义...

    SSH注解方式整合小例子

    **Struts2** 是一个基于MVC设计模式的Action驱动的Web应用框架,它通过注解可以实现Action类的声明式配置。例如,我们可以在Action类上使用`@Action`注解来指定URL映射,以及在方法上使用`@Result`注解定义结果页面...

    hibernate+spring+strust2完全基于注解的框架整合

    在Hibernate中,注解如`@Entity`定义实体类,`@Table`指定对应的数据库表,`@Id`标识主键,`@GeneratedValue`处理自增主键,`@Column`定义列属性,`@ManyToOne`、`@OneToOne`、`@OneToMany`等表示关联关系。...

Global site tag (gtag.js) - Google Analytics