- 浏览: 645538 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (345)
- java (63)
- Struts2 (11)
- Spring2.5 + (17)
- Hibernate (25)
- Struts2 Spring hibernate (5)
- log4j (3)
- apache tomcat (12)
- oracle (22)
- oracle_存储过程 (4)
- mysql (18)
- jquery (11)
- prototype (5)
- js (19)
- quartz (5)
- 设计模式 (6)
- eclipse/MyEclipse 注意事项 (9)
- eclipse (0)
- css (6)
- 正则表达式 (2)
- linux (18)
- PHP (6)
- 多线程 (20)
- XML (1)
- jstl (3)
- mongoDB (7)
- android (20)
- 反射 (1)
- IOS (46)
- SVN (3)
- C/C++ (4)
- 百度地图 (2)
- IO/SOCKET (3)
- 百度地图JS (1)
- 树莓派/香蕉派 (1)
最新评论
-
anny101:
想转发一下,不知道怎么转发。评论一下吧。方便查看。
fetch = FetchType.EAGER 作用 -
Navee:
果然我这也是是防火墙问题
解决 Linux 安装 httpd局域网无法访问 -
dhyang909:
...
oracle 10g+ 行列转换 -
国产希特勒:
真强,居然有人把公司的面试题挂到javaeye上了
锦江国际的一道面试题(很简单) -
tomfish88:
比如我要拦截不同业务的service类里面的方法 @Poi ...
Spring AOP annotation 拦截表达式 分析
数据库:
/* MySQL Data Transfer Source Host: localhost Source Database: test Target Host: localhost Target Database: test Date: 2011-10-18 16:44:27 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for table_a -- ---------------------------- DROP TABLE IF EXISTS `table_a`; CREATE TABLE `table_a` ( `id` int(11) NOT NULL auto_increment, `name` varchar(20) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for table_b -- ---------------------------- DROP TABLE IF EXISTS `table_b`; CREATE TABLE `table_b` ( `id` int(11) NOT NULL auto_increment, `name` varchar(20) default NULL, `aid` int(11) default NULL, PRIMARY KEY (`id`), KEY `FK_aid_A_id` (`aid`), CONSTRAINT `FK_aid_A_id` FOREIGN KEY (`aid`) REFERENCES `table_a` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for table_c -- ---------------------------- DROP TABLE IF EXISTS `table_c`; CREATE TABLE `table_c` ( `id` int(11) NOT NULL auto_increment, `name` varchar(20) default NULL, `bid` int(11) default NULL, PRIMARY KEY (`id`), KEY `FK_bid_B_id` (`bid`), CONSTRAINT `FK_bid_B_id` FOREIGN KEY (`bid`) REFERENCES `table_b` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records -- ---------------------------- INSERT INTO `table_a` VALUES ('1', 'a_1'); INSERT INTO `table_a` VALUES ('2', 'a_2'); INSERT INTO `table_a` VALUES ('3', 'a_3'); INSERT INTO `table_a` VALUES ('4', 'a_4'); INSERT INTO `table_a` VALUES ('5', 'a_5'); INSERT INTO `table_a` VALUES ('6', 'a_6'); INSERT INTO `table_a` VALUES ('7', 'a_7'); INSERT INTO `table_a` VALUES ('8', 'a_8'); INSERT INTO `table_a` VALUES ('9', 'a_9'); INSERT INTO `table_a` VALUES ('10', 'a_10'); INSERT INTO `table_b` VALUES ('1', 'b_1', '1'); INSERT INTO `table_b` VALUES ('2', 'b_2', '1'); INSERT INTO `table_b` VALUES ('3', 'b_3', '1'); INSERT INTO `table_b` VALUES ('4', 'b_4', '1'); INSERT INTO `table_b` VALUES ('5', 'b_5', '1'); INSERT INTO `table_b` VALUES ('6', 'b_6', '1'); INSERT INTO `table_b` VALUES ('7', 'b_7', '1'); INSERT INTO `table_b` VALUES ('8', 'b_8', '1'); INSERT INTO `table_b` VALUES ('9', 'b_9', '1'); INSERT INTO `table_b` VALUES ('10', 'b_10', '1'); INSERT INTO `table_c` VALUES ('1', 'c_1', '1'); INSERT INTO `table_c` VALUES ('2', 'c_2', '1'); INSERT INTO `table_c` VALUES ('3', 'c_3', '1'); INSERT INTO `table_c` VALUES ('4', 'c_4', '1'); INSERT INTO `table_c` VALUES ('5', 'c_5', '1'); INSERT INTO `table_c` VALUES ('6', 'c_6', '1'); INSERT INTO `table_c` VALUES ('7', 'c_7', '1'); INSERT INTO `table_c` VALUES ('8', 'c_8', '1'); INSERT INTO `table_c` VALUES ('9', 'c_9', '1'); INSERT INTO `table_c` VALUES ('10', 'c_10', '1');
表映射的3个类
package com.hibernate.entity; import java.util.HashSet; /** * TableA entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "table_a", catalog = "test") public class TableA implements java.io.Serializable { // Fields /** * */ private static final long serialVersionUID = 5391348233326253804L; private Integer id; private String name; private Set<TableB> tableBs = new HashSet<TableB>(0); // Constructors /** default constructor */ public TableA() { } /** full constructor */ public TableA(String name, Set<TableB> tableBs) { this.name = name; this.tableBs = tableBs; } // Property accessors @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name = "name", length = 20) public String getName() { return this.name; } public void setName(String name) { this.name = name; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "tableA") public Set<TableB> getTableBs() { return this.tableBs; } public void setTableBs(Set<TableB> tableBs) { this.tableBs = tableBs; } } package com.hibernate.entity; import java.util.HashSet; /** * TableB entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "table_b", catalog = "test") public class TableB implements java.io.Serializable { // Fields /** * */ private static final long serialVersionUID = -4305123492413110511L; private Integer id; private TableA tableA; private String name; private Set<TableC> tableCs = new HashSet<TableC>(0); // Constructors /** default constructor */ public TableB() { } /** full constructor */ public TableB(TableA tableA, String name, Set<TableC> tableCs) { this.tableA = tableA; this.name = name; this.tableCs = tableCs; } // Property accessors @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "aid") public TableA getTableA() { return this.tableA; } public void setTableA(TableA tableA) { this.tableA = tableA; } @Column(name = "name", length = 20) public String getName() { return this.name; } public void setName(String name) { this.name = name; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "tableB") public Set<TableC> getTableCs() { return this.tableCs; } public void setTableCs(Set<TableC> tableCs) { this.tableCs = tableCs; } } package com.hibernate.entity; import javax.persistence.Column; /** * TableC entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "table_c", catalog = "test") public class TableC implements java.io.Serializable { // Fields /** * */ private static final long serialVersionUID = -8806809289431187808L; private Integer id; private TableB tableB; private String name; // Constructors /** default constructor */ public TableC() { } /** full constructor */ public TableC(TableB tableB, String name) { this.tableB = tableB; this.name = name; } // Property accessors @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "bid") public TableB getTableB() { return this.tableB; } public void setTableB(TableB tableB) { this.tableB = tableB; } @Column(name = "name", length = 20) public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
Hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="connection.url"> jdbc:mysql://localhost/test </property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class"> org.hibernate.cache.NoCacheProvider </property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- <mapping class="com.hibernate.entity.Husband" /> <mapping class="com.hibernate.entity.Wife" /> =================================================== <mapping class="com.hibernate.entity.Teacher" /> <mapping class="com.hibernate.entity.Student" /> <mapping class="com.hibernate.entity.Tgroup" /> <mapping class="com.hibernate.entity.Tuser" /> --> <mapping class="com.hibernate.entity.TableC" /> <mapping class="com.hibernate.entity.TableB" /> <mapping class="com.hibernate.entity.TableA" /> </session-factory> </hibernate-configuration>
log4j.properties
### set log levels ### log4j.rootLogger=warn, stdout, D, E ### 输出到控制台 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c:%L - %m%n ### 输出到日志文件 ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = ${WORKDIR}/logs/log.log log4j.appender.D.Append = true ## 输出DEBUG级别以上的日志 log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - %c:%L - [%p] %m%n ### 保存异常信息到单独文件 ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender ## 异常日志文件名 log4j.appender.E.File = ${WORKDIR}/logs/error.log log4j.appender.E.Append = true ## 只输出ERROR级别以上的日志!!! log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [%t\:%r] - %c\:%L - [%p] %m%n
测试代码:
package com.hibernate.test; import java.util.HashMap; public class ORMappingTest { private static SessionFactory sessionFactory; @BeforeClass public static void setUpBeforeClass() throws Exception { //new SchemaExport(new AnnotationConfiguration().configure()).create(true, true); sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } @AfterClass public static void tearDownAfterClass() throws Exception { sessionFactory.close(); } //根据annotation生成表,当然,这里并不使用到 @Test public void testSchemaExport() { new SchemaExport(new AnnotationConfiguration().configure()).create(true, true); } //把值存入A B C三张表 @Test public void saveABC() { Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); TableA a = null; for (int i = 0; i < 10; i++) { a = new TableA(); a.setName("a_" + (i + 1)); s.save(a); } a = (TableA)s.get(TableA.class, 1); TableB b = null; for (int i = 0; i < 10; i++) { b = new TableB(); b.setName("b_" + (i + 1)); b.setTableA(a); s.save(b); } TableC c = null; b = (TableB)s.get(TableB.class, 1); for (int i = 0; i < 10; i++) { c = new TableC(); c.setName("c_" + (i + 1)); c.setTableB(b); s.save(c); } s.getTransaction().commit(); } @Test public void testQBC() { Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); Integer []id_s = {1,2,3,4}; Criteria c = s.createCriteria(TableA.class)// 这里相当于 from TableA .add(Restrictions.in("id", id_s)) //这里取id在1,2,3,4中的TableA .createCriteria("tableBs") //表示把tableBs加进去再作为一个查询条件,tableBs是A对象中的一个属性 .add(Restrictions.between("id", 5, 8)) ; List<TableA> taList = c.list(); for (TableA a : taList) { System.out.println(a.getName()); } } }
发表评论
-
OneToMany字段序列化 failed to lazily initialize a collection of role
2014-06-06 18:51 1457hibernate项目中,如果要对onetomany的po ... -
hibernate 本地查询 字段别名 映射到 DTO时注意事项
2014-04-22 13:54 3505本地原生SQL: SELECT pole.pId as ... -
实体中的数据库字段有关键字
2014-03-26 15:08 980mysql中如果表的字段设成了关键字,那么在做某些操作时会抛 ... -
Spring +hibernate 声明式 事物 + annotation
2012-03-22 19:49 908在applicationContext.xml中 &l ... -
Hibernate distinct
2012-02-15 18:05 1067/** * 得到大区编号和名称 * @ret ... -
@Transactional 事务回滚 分析
2011-11-08 16:51 4280@Transactional 事务回滚 Spring的 ... -
Hibernate 性能优化_3
2011-10-25 15:54 607二级缓存 对于二级缓存,其实并不一定要在项目中使用 ... -
Hibernate 性能优化_2
2011-10-20 17:51 825createQuery("FROM ****&quo ... -
Hibernate 性能优化_1
2011-10-18 18:39 967大概如此:不一定说在每个项目中都合适 1、 使用se ... -
转的:Hibernate 的 Criteria用法
2011-10-18 16:37 1301方法 说明 Restric ... -
Hibernate 的 join
2011-10-18 13:29 977转的: 1.如果没有在Hibernate配置里做关 ... -
fetch = FetchType.EAGER 作用
2011-10-13 11:47 28702如果是EAGER,那么表示取出这条数据时,它关联的数据也同时取 ... -
用myeclipse的Hibernate 反向引擎 生成 数据库的 entity
2011-09-22 14:44 8804把 Myeclipse 转到DB Browser 新建 ... -
Hibernate annotation 多对多双向关联(很少用)
2011-09-21 16:44 1674双向关联 在认为的 主表 上用到 @JoinTable ... -
Hibernate annotation 多对多单向关联
2011-09-21 16:33 1580package com.hibernate.entity ... -
Hibernate annotation 一对多,多对一
2011-09-21 16:03 1939package com.hibernate.entity ... -
Hibernate annotation 联合主键
2011-09-20 15:31 1526Hibernate annotation 联合主键 ... -
Hibernate annotation 的各种关系
2011-09-15 15:59 994转的: 一、@OneToOne Java ... -
Hibernate 双向关联
2011-09-15 15:55 973不管是啥关联,只要是双向,都必须用到mappedBy ... -
OneToOne annotation 双向关联
2011-09-15 15:51 1159package com.hibernate.entity ...
相关推荐
4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...
4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...
4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...
使用 Hibernate Criteria && DetachedCriteria Queries演示Exists Clause非常简单的项目 安装 git clone https://github.com/RameshRM/hibernate-sample.git 跑步 mvn install 这是一个maven项目,依赖项是 ...
4.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 使用非final的类 (可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和...
4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...
4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...
实现一个默认的构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 建议使用不是final的类 (可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和hashCode...
5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)(可选) 5.1.4. 使用非final的类 (可选) 5.2. 实现继承(Inheritance) 5.3. 实现equals()和...
实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的标志...
4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...
5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)(可选) 5.1.4. 使用非final的类 (可选) 5.2. 实现继承(Inheritance) 5.3. 实现equals()和...
5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)(可选) 5.1.4. 使用非final的类 (可选) 5.2. 实现继承(Inheritance) 5.3. 实现equals()和...
4.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 使用非final的类 (可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和...
实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)(可选) 5.1.4. 使用非final的类 (可选) 5.2. 实现继承(Inheritance) 5.3. 实现equals()和hashCode...
实现一个默认的构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 建议使用不是final的类 (可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和hashCode...
4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...
我专门申请了一个网盘.所有下载地址在下载下来的这个rar包里面都有详细的介绍和说明. 说一下这个rar里面带的东西.除了源码外带了几篇文档.分别是关于项目中所使用的dwr的配置.table组件的配置说明文档.junit单元...
4.1. 一个简单的 POJO 例子 ................................................. 51 4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) ............. 52 4.1.2. 提供一个标识属性(identifier property...
它带有一些数据库优化,如准备好的语句、缓存、Hibernate Criteria,如查询 (todo) 和版本控制。用法首先用@Model注释你的类,而不是用@Property定义属性。 例子 : @Modelpublic class Castle { @Id long id; @...