直接看代码:
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也不会重复。。。
搞了半天。。哎
分享到:
相关推荐
对于OneToMany关系,我们需要在父实体上使用@OneToMany注解,并在子实体上使用@ManyToOne注解来建立双向关联。 3. **@OneToMany注解**:此注解包含几个重要的属性,如`mappedBy`、`fetch`和`cascade`。`mappedBy`...
同时,`@OneToMany`、`@ManyToOne`、`@ManyToMany`等注解用于处理多对一、一对多和多对多的关系。 在登录功能的实现中,通常会有以下步骤: 1. **用户输入验证**:用户在前端页面填写用户名和密码,提交到Struts2...
"Eclipse基于注解方式搭建SSH框架"项目展示了如何在Eclipse环境中利用注解驱动的方式集成Struts2、Spring和Hibernate,实现了一个包含注册功能的Web应用。项目中使用了JPA注解简化了数据库交互,并通过数据库脚本...
在Hibernate中,这种关系可以通过在实体类中定义`@OneToMany`注解来表示。 **配置实体类** 1. **父实体类**:在这个关系中,"一"端的实体称为父实体。例如,我们用`Student`作为父实体,它有一对多的课程关联。在`...
这个基于全注解的SSH完整例子旨在帮助开发者快速理解和掌握这三大框架的集成与应用。 Struts是MVC(Model-View-Controller)设计模式的一个实现,主要用于处理用户的请求并控制应用程序流程。在全注解的配置下,...
`,并使用`@OneToMany`注解来标注这个属性,指定关联的子类以及其他的配置选项,如级联操作、fetch模式等。 接下来,你需要在映射文件(XML或使用注解)中配置这个关系。如果使用XML映射,会在父类的映射文件中添加...
此外,`@OneToMany`, `@ManyToOne`, `@OneToOne`, 和`@ManyToMany`等注解用于描述实体之间的关联关系。对于DAO层,Hibernate提供了一套基于注解的CRUD接口,如`@Transactional`确保操作的事务性,`@Query`可以编写...
同时,`@ManyToOne`、`@OneToOne`、`@OneToMany`和`@ManyToMany`等注解用于定义关联关系。此外,`@Column`用于定义字段与列的对应,`@GeneratedValue`可以配合`@SequenceGenerator`进行序列化主键生成。 三、Struts...
此外,`@GeneratedValue`用于指定主键生成策略,`@OneToMany`、`@ManyToOne`等注解用于建立关联关系。 Oracle数据库是广泛使用的商业关系型数据库系统,具备高可用性、高性能和丰富的功能。在SpringMVC和Hibernate...
在这个“基于注解的关联关系Hibernate”的主题中,我们将深入探讨如何使用Hibernate的注解来配置不同类型的关联关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-...
压缩包中的"SSH(基于注解)"可能包含了这样一个完整的示例项目,包括Struts2的Action、Spring的配置、Hibernate的实体类以及相应的整合配置。通过对这些文件的分析和学习,可以更好地理解SSH的注解整合方式。 总结,...
而`@OneToMany`、`@ManyToOne`等注解则定义了对象之间的关联关系。同时,`@Transactional`注解与Spring的事务管理结合,确保数据操作的原子性。 4. **数据库设计**:由于是人力资源管理系统,数据库设计通常包括...
在Order实体中,@ManyToOne注解表示多的一方,而User实体中@OneToMany表示一的一方。mappedBy属性表明Order实体是关系的拥有者。 四、多对多(ManyToMany)关系映射 多对多关系是最复杂的关系类型,表示两个实体...
同时,`@OneToMany`、`@ManyToOne`、`@ManyToMany`等注解处理关联关系。 4. **前端校验** 考试系统的前端校验确保了用户输入的有效性,减少了服务器端的负担。Struts2提供了丰富的验证框架,可以结合JSR303/JSR349...
在Java的持久化框架Hibernate中,`@OneToMany`注解是用于表示一对多关系的,这种关系常见于数据库设计中的父表与子表之间。在这个主题中,我们将深入探讨如何在实体类中使用`@OneToMany`注解以及其在实际项目中的...
Hibernate的注解如`@Entity`定义实体类,`@Table`指定数据库表名,`@Id`定义主键,`@GeneratedValue`生成主键值,`@ManyToOne`、`@OneToMany`等定义关联关系。这些注解使得数据库模型的定义更加直观,无需编写复杂的...
`@ManyToOne`, `@OneToMany`, `@OneToOne` 和 `@ManyToMany`注解用于建立对象之间的关系。 **SpringMVC** SpringMVC是Spring框架的一部分,专门负责处理HTTP请求和响应。通过`@RequestMapping`注解,我们可以将特定...
此外,`@OneToMany`、`@ManyToOne`等注解用于定义对象间的关联关系。 3. **Struts2框架**:Struts2是MVC设计模式的实现,它负责处理用户界面与业务逻辑之间的交互。`@Action`注解标记控制器类或方法,`@Result`定义...
**Struts2** 是一个基于MVC设计模式的Action驱动的Web应用框架,它通过注解可以实现Action类的声明式配置。例如,我们可以在Action类上使用`@Action`注解来指定URL映射,以及在方法上使用`@Result`注解定义结果页面...
在Hibernate中,注解如`@Entity`定义实体类,`@Table`指定对应的数据库表,`@Id`标识主键,`@GeneratedValue`处理自增主键,`@Column`定义列属性,`@ManyToOne`、`@OneToOne`、`@OneToMany`等表示关联关系。...