- 浏览: 702893 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (362)
- java基础 (33)
- html/css+div/javascript (17)
- Ajax/XML/JSON/XSL (7)
- JQuery (11)
- Extjs (1)
- JSP/Servlet (19)
- MVC模式 (4)
- struts 1 (17)
- Struts 2.3.4 (17)
- Spring 3.2 (26)
- Springmvc (3)
- Hibernate 4.1 (21)
- ibatis (6)
- Velocity模板语言 (2)
- Rose框架 (5)
- EJB (1)
- JUnit测试 (2)
- 数据库DB (24)
- 重构 / 设计模式 (3)
- 开发工具IDE (37)
- 数据结构与算法设计 (3)
- Android (12)
- Linux (4)
- bug集合 (29)
- 缓存技术(redis) (3)
- Lucene全文索引 (15)
- maven3.0.5 (4)
- 小工具集合 (18)
- 面试题 (5)
- 闲聊 (11)
- 其他 (4)
- 接口API (2)
- work (2)
- Flex (0)
- JMS (1)
- 开源项目集合 (1)
- 技术博客 (1)
- 分类04 (0)
- 分类05555 (0)
最新评论
-
小小小羊:
好屌...
java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Refle -
liubinli2005:
这个可以脱底spring。单独使用吗?
DAO层:jade -
cangbaotu:
我觉得对于开发者来说,能脚本化编写爬虫是一件挺开心的事情( ̄▽ ...
网页爬取 -
asjava:
很好的文章, 但每段代码清单都重复了一次.
spring 事务 -
xia635317478:
jethypc 写道验证码的session无法传过去啊 还是我 ...
登陆验证码(struts2实现)
栏目、帖子、回复(设置导航ManyToOne便于操作QBC/QBE语句)02
Criteria查询也称QBC查询:全称为Query By Criteria;它是一种采用面向
对象的方式,封装查询条件,进行查询。
CriteriaRestriction常用的限定查询方法方法说明
Restrictions.Eq()对应SQL中的“= ”
Restrictions。alleq()对应Map,使用key/value进行多个相等的值的对比
Restrictions。gt()对应SQL的大于“> ”;
Restrictions。ge()对应SQL的大于等于“>= ”
Restrictions。lt()对应SQL的小于“<”
Restrictions。le()对应SQL的小于等于“=<”Restrictions。le()对应SQL的小于等于“=<”
Restrictions。between()对应SQL的between ;
Restrictions。like()对应SQL中的like语句可以使用MatchMode 设定like 语句的匹配模式
Restrictions。in()对应SQL中的in ;
Restrictions。and()对应SQL中的and
Restrictions。or()对应SQL中的or
Restrictions。not()对应SQL中的not
一、Category.java
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Category { private int id; private String name; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
二、Top.java
import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; @Entity @NamedQueries( { @NamedQuery(name="topic.selectCertainTopic", query="from Topic t where t.id = :id") } ) /* @NamedNativeQueries( { @NamedNativeQuery(name="topic.select2_5Topic", query="select * from topic limit 2, 5") } ) */ public class Topic { private int id; private String title; private Category category; private Date createDate; private List<Msg> msgs = new ArrayList<Msg>(); @OneToMany(mappedBy="topic") public List<Msg> getMsgs() { return msgs; } public void setMsgs(List<Msg> msgs) { this.msgs = msgs; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } @ManyToOne(fetch=FetchType.LAZY) public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } }
三、Msg.java
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entity public class Msg { private int id; private String cont; private Topic topic; @ManyToOne public Topic getTopic() { return topic; } public void setTopic(Topic topic) { this.topic = topic; } @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCont() { return cont; } public void setCont(String cont) { this.cont = cont; } }
四、test.java
import java.util.Date; import java.util.List; import org.hibernate.Query; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class HibernateQLTest { private static SessionFactory sf; @BeforeClass public static void beforeClass() { sf = new AnnotationConfiguration().configure().buildSessionFactory(); } @AfterClass public static void afterClass() { sf.close(); } @Test public void testSchemaExport() { new SchemaExport(new AnnotationConfiguration().configure()).create(false, true); } @Test public void testSave() { Session session = sf.openSession(); session.beginTransaction(); for(int i=0; i<10; i++) { Category c = new Category(); c.setName("c" + i); session.save(c); } for(int i=0; i<10; i++) { Category c = new Category(); c.setId(1); Topic t = new Topic(); t.setCategory(c); t.setTitle("t" + i); t.setCreateDate(new Date()); session.save(t); } for(int i=0; i<10; i++) { Topic t = new Topic(); t.setId(1); Msg m = new Msg(); m.setCont("m" + i); m.setTopic(t); session.save(m); } session.getTransaction().commit(); session.close(); } //is empty and is not empty @Test public void testHQL_20() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("from Topic t where t.msgs is empty"); for(Object o : q.list()) { Topic t = (Topic)o; System.out.println(t.getId() + "-" + t.getTitle()); } session.getTransaction().commit(); session.close(); } @Test public void testHQL_21() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("from Topic t where t.title like '%5'"); for(Object o : q.list()) { Topic t = (Topic)o; System.out.println(t.getId() + "-" + t.getTitle()); } session.getTransaction().commit(); session.close(); } @Test public void testHQL_22() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("from Topic t where t.title like '_5'"); for(Object o : q.list()) { Topic t = (Topic)o; System.out.println(t.getId() + "-" + t.getTitle()); } session.getTransaction().commit(); session.close(); } //不重要 @Test public void testHQL_23() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("select lower(t.title)," + "upper(t.title)," + "trim(t.title)," + "concat(t.title, '***')," + "length(t.title)" + " from Topic t "); for(Object o : q.list()) { Object[] arr = (Object[])o; System.out.println(arr[0] + "-" + arr[1] + "-" + arr[2] + "-" + arr[3] + "-" + arr[4] + "-"); } session.getTransaction().commit(); session.close(); } @Test public void testHQL_24() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("select abs(t.id)," + "sqrt(t.id)," + "mod(t.id, 2)" + " from Topic t "); for(Object o : q.list()) { Object[] arr = (Object[])o; System.out.println(arr[0] + "-" + arr[1] + "-" + arr[2] ); } session.getTransaction().commit(); session.close(); } @Test public void testHQL_25() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("select current_date, current_time, current_timestamp, t.id from Topic t"); for(Object o : q.list()) { Object[] arr = (Object[])o; System.out.println(arr[0] + " | " + arr[1] + " | " + arr[2] + " | " + arr[3]); } session.getTransaction().commit(); session.close(); } @Test public void testHQL_26() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("from Topic t where t.createDate < :date"); q.setParameter("date", new Date()); for(Object o : q.list()) { Topic t = (Topic)o; System.out.println(t.getTitle()); } session.getTransaction().commit(); session.close(); } @Test public void testHQL_27() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("select t.title, count(*) from Topic t group by t.title") ; for(Object o : q.list()) { Object[] arr = (Object[])o; System.out.println(arr[0] + "|" + arr[1]); } session.getTransaction().commit(); session.close(); } @Test public void testHQL_28() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("select t.title, count(*) from Topic t group by t.title having count(*) >= 1") ; for(Object o : q.list()) { Object[] arr = (Object[])o; System.out.println(arr[0] + "|" + arr[1]); } session.getTransaction().commit(); session.close(); } @Test public void testHQL_29() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("from Topic t where t.id < (select avg(t.id) from Topic t)") ; for(Object o : q.list()) { Topic t = (Topic)o; System.out.println(t.getTitle()); } session.getTransaction().commit(); session.close(); } @Test public void testHQL_30() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("from Topic t where t.id < ALL (select t.id from Topic t where mod(t.id, 2)= 0) ") ; for(Object o : q.list()) { Topic t = (Topic)o; System.out.println(t.getTitle()); } session.getTransaction().commit(); session.close(); } //用in 可以实现exists的功能 //但是exists执行效率高 @Test public void testHQL_31() { Session session = sf.openSession(); session.beginTransaction();// t.id not in (1) Query q = session.createQuery("from Topic t where not exists (select m.id from Msg m where m.topic.id=t.id)") ; // Query q = session.createQuery("from Topic t where exists (select m.id from Msg m where m.topic.id=t.id)") ; for(Object o : q.list()) { Topic t = (Topic)o; System.out.println(t.getTitle()); } session.getTransaction().commit(); session.close(); } //update and delete //规范并没有说明是不是要更新persistent object,所以如果要使用,建议在单独的trasaction中执行 @Test public void testHQL_32() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.createQuery("update Topic t set t.title = upper(t.title)") ; q.executeUpdate(); q = session.createQuery("from Topic"); for(Object o : q.list()) { Topic t = (Topic)o; System.out.println(t.getTitle()); } session.createQuery("update Topic t set t.title = lower(t.title)") .executeUpdate(); session.getTransaction().commit(); session.close(); } //不重要 @Test public void testHQL_33() { Session session = sf.openSession(); session.beginTransaction(); Query q = session.getNamedQuery("topic.selectCertainTopic"); q.setParameter("id", 5); Topic t = (Topic)q.uniqueResult(); System.out.println(t.getTitle()); session.getTransaction().commit(); session.close(); } //Native(了解) @Test public void testHQL_34() { Session session = sf.openSession(); session.beginTransaction(); SQLQuery q = session.createSQLQuery("select * from category limit 2,4").addEntity(Category.class); List<Category> categories = (List<Category>)q.list(); for(Category c : categories) { System.out.println(c.getName()); } session.getTransaction().commit(); session.close(); } @Test public void testHQL_35() { //尚未实现JPA命名的NativeSQL } public static void main(String[] args) { beforeClass(); } }
发表评论
-
hibernate缓存总结
2013-09-05 09:54 747hibernate缓存总结 Hibernat ... -
Hibernate原理
2013-09-05 09:10 1189Hibernate原理 1.hibernate ... -
getHibernateTemplate().save和super.getHibernateTemplate().merge
2012-12-05 15:16 3006代码1_save: super.getHibernate ... -
分页查询
2012-12-03 16:57 847HibernateTemplate提供了非常多的常用方法来完成 ... -
mappingResource属性和mappingDirectoryLocations属性的使用
2012-11-19 16:54 649mappingResource属性和mappingDirect ... -
S2SH整合
2012-11-12 16:08 1086Struts2_spring_Hibernate整合 MyE ... -
spring中配置log4j
2012-11-10 16:30 1653log4j 和 slf4j slf4j和log4j用于做日志 ... -
log4j 和slf4j
2012-11-11 20:55 874http://sishuok.com/forum/blogPo ... -
Hibernate两级缓存
2012-10-29 17:01 768Hibernate两级缓存 一级缓存就是Session级别 ... -
数据加载 load get list iterator
2012-10-07 11:14 1073Hibernate的优化-数据加载 除了对映射文件的配置外 ... -
栏目、帖子、回复(设置导航便于操作)HQL使用01
2012-10-06 11:28 962栏目、帖子、回复(设置导航ManyToOne便于操作 HQL语 ... -
Many-To-Many (学生、课程、分数)
2012-10-05 17:41 1343Many-To-Many (学生、课程、分数) 多对多: 一个 ... -
树状结构Tree
2012-10-05 17:09 1158树状结构Tree 一、部门类Org.java impo ... -
CUDR_Fetch 和 Cascade
2012-10-05 16:05 4707CUDR_Fetch 和 Cascade 1.Fetch ... -
OneToOne 、OneToMany 、 ManyToMany
2012-10-05 10:31 3548OneToOne OneToMany ManyToMa ... -
ID生成策略
2012-10-04 16:18 3925ID生成策略 1.XX.hbm.xml方 ... -
对象的几种状态
2012-10-04 14:10 1402对象的几种状态 1.Transient 刚new一个 ... -
load 和 get的区别
2012-10-04 11:49 1254session加载数据库数据时,load 和 get 1. ... -
Hibernate 注解和配置文件由ORM框架连接库
2012-10-02 12:30 4197Hibernate 注解和配置文件由ORM框架连接库 xm ... -
Hibernate 实现原理
2012-09-12 23:20 4191整体流程 1:通过configuration来读cfg.xml ...
相关推荐
总的来说,`ManyToOne`是Hibernate中用于处理一对多关系的重要工具,它通过注解或者XML配置实现对象关系映射,提供了便捷的导航属性和级联操作,同时也支持懒加载以优化性能。理解并熟练运用`ManyToOne`关系,对于...
标题“SpringBoot-SpringData-ManyToOne”涉及到的是Spring Boot与Spring Data JPA在处理多对一关系时的应用。Spring Boot是Spring框架的一个轻量级版本,它简化了配置和项目初始化,使得开发者能够更快地开始开发...
在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发者通过面向对象的方式操作数据库,而无需直接编写SQL语句。本文将深入探讨如何模仿Hibernate生成SQL语句,以及如何利用Java反射技术来...
它允许开发者通过简单的Java接口操作数据库,避免了繁琐的SQL语句编写。GreenDao支持实体类的创建、增删改查以及复杂的数据库操作,包括一对多、多对一和多对多的关系映射。 ### 2. 一对多关系 在数据库设计中,一...
进行表关联操作时,Hibernate允许我们在实体类层面定义这些关系,然后在程序中直接操作对象,而不是SQL语句。这样不仅可以提高开发效率,还使得代码更加面向对象。例如,要添加一个新的订单,我们只需要创建一个`...
例如,当我们在`User`上执行`entityManager.remove(user)`时,由于设置了`CascadeType.ALL`,JPA会自动删除所有与该用户相关的`Post`。 但是,级联操作需谨慎使用,因为它们可能导致数据丢失或不一致。例如,如果...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作。在Hibernate中,关联映射是连接数据库表之间关系的关键概念,使得对象模型能够准确反映数据库结构...
它允许开发者使用面向对象的方式进行数据操作,而无需关注底层的SQL语句。本文将深入探讨Hibernate执行持久层访问的详细步骤,帮助开发者更好地理解和应用Hibernate。 一、配置环境 1. 添加Hibernate依赖:在项目中...
JPA通过提供ORM(对象关系映射)功能,允许开发者使用面向对象的方式处理数据库操作,而无需过多关注SQL语句的编写。 **JPQL(Java Persistence Query Language)**是JPA的一部分,它是面向对象的查询语言,类似于...
标题中的“hibernate02.rar”重复多次,暗示了这个压缩包可能包含了与Hibernate相关的学习资料或项目实例,Hibernate是一个流行的Java持久层框架,用于简化数据库操作。描述中的内容同样重复,没有提供额外信息,...
使用`@ManyToOne`或`@OneToOne`注解时,可以通过设置`fetch`属性来指定加载策略。 接下来是对象的更新。当你修改一个已加载的实体并调用`EntityManager`的`merge()`方法时,JPA会将对象的状态同步到数据库。如果...
2. **@Cascade** - 设置级联操作,如 save-update、delete 等。 **五、其他高级特性** 1. **@Inheritance** - 支持继承关系的映射,如 TABLE_PER_CLASS、SINGLE_TABLE、JOINED。 2. **@SecondaryTable** - 支持...
通过这些操作,我们可以轻松地在Java应用中处理数据库数据,而无需直接编写SQL语句,极大地提高了开发效率和代码的可维护性。在实际项目中,还需要注意事务管理、性能优化等方面,使得Hibernate能够更好地服务于我们...
// 设置级联操作为 None,即不执行任何级联操作。 m.Unique(true); // 设置该属性为唯一。 }); ``` - **Column("OwnerID")**:此方法用于指定映射到数据库表中的列名。在这个例子中,`OwnerID`字段将映射到数据库...
6. **@ManyToOne/@OneToOne/@OneToMany/@ManyToMany**:表示不同类型的关联关系。 #### 六、Hibernate的最佳实践 1. **延迟加载**:为了提高性能,Hibernate提供了延迟加载机制,可以在真正需要的时候再加载关联...
它允许开发者用面向对象的方式来处理数据库记录,从而避免了大量的SQL语句编写工作。随着Hibernate的不断更新和完善,注解(Annotation)逐渐成为配置实体类与数据库表映射的主要方式之一。本文将详细介绍Hibernate...
这可以通过在@OneToMany或@ManyToOne注解中设置cascade属性来实现,如 cascade=CascadeType.ALL(包含所有操作)。 六、缓存机制 Hibernate支持二级缓存,提高数据读取效率。一级缓存是Session级别的,每个Session...