1.最近用hibernate 学会很多知识,总结如下:

(1)数据库表格已经设置默认值,在进行数据插入的时候,bean里面不赋值的话,插入之后该字段依旧是null

是因为hibernate默认插入和更新所有字段,如果某些字段不需要操作,需要配置下
(i)xml文件配置方式:
<property name="account" type="java.lang.String" insert="false">
<column name="account" length="100" />
</property>

加入insert="false" 就可以使它插入时不再对该字段进行操作,此值默认为true。同理update

(ii)注释方式:

@Column(insertable=false)
public Integer getOrderNo() {
return orderNo;
}
public void setOrderNo(Integer orderNo) {
this.orderNo = orderNo;
}

以下是他人总结内容(原帖地址:http://blog.csdn.net/xzknet/article/details/3905741)

  1)<property>元素 insert属性:设置为false,在insert语句中不包含这个字段,表示永远不会被插入,默认true
  2)<property>元素 update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true
  3)<class>元素 mutable属性:设置为false就是把所有的<property>元素的update属性设置为了false,说明这个对象不会被更新,默认true
  4)<property>元素 dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false
  5)<property>元素 dynamic-update属性,设置为true,表示更新一个对象时,会生成动态SQL,当属性值发生变化时,才会包含到UPDATE语句中。 默认false  
  <class name="com.teccore.wjk.entity.Account" table="account" dynamic-insert="true" dynamic-update="true">
  6)<class>元素 dynamic-insert属性:设置为true,表示把所有的<property>元素的dynamic-insert属性设置为true,默认false
  7)<class>元素 dynamic-update属性:设置为true,表示把所有的<property>元素的dynamic-update属性设置为true,默认false 
(2)Hibernate Criterion设置查询条件
Criterion是Criteria的查询条件.Criteria提供了add(Criterion criterion)方法来添加查询条件
Criterion接口的主要实现包括:Example、Junction和SimpleExpression.
(i)Junction的实际使用是它的两个子类conjunction和disjunction,分别是使用AND和OR操作符来联结查询条件集合.
Disjunction和Conjunction是逻辑或和逻辑与,可以用这个来构造复杂的SQL查询条件,例子如下(来源:http://blog.csdn.net/whqcfp/article/details/6029061):
Disjunction disjunction = Restrictions.disjunction();
Criterion cirterion = Restrictions.sqlRestriction("SIMULPORTCAPACITY<SIMULPORTCAPACITYOCUPIED".toLowerCase());
disjunction.add(cirterion);
cirterion = Restrictions.sqlRestriction("ADSLPORTCAPACITY<ADSLPORTCAPACITYOCCUPIED".toLowerCase());
disjunction.add(cirterion);
cirterion = Restrictions.sqlRestriction("LANPORTCAPACITY<LANPORTCAPACITYOCCUPIED".toLowerCase());
disjunction.add(cirterion); // ONU端口,至少要录入一种端口
Conjunction conjunction = Restrictions.conjunction();
cirterion = Restrictions.eq("lanportcapacity", 0);
conjunction.add(cirterion);
cirterion = Restrictions.eq("simulportcapacity", 0);
conjunction.add(cirterion);
cirterion = Restrictions.eq("adslportcapacity", 0);
conjunction.add(cirterion); disjunction.add(conjunction);
queryCriteria.add(disjunction);
}

构造出的sql语句如下:

select *
from aaaa this_
where (simulportcapacity < simulportcapacityocupied or
adslportcapacity < adslportcapacityoccupied or
lanportcapacity < lanportcapacityoccupied or
(this_.LANPORTCAPACITY = ? and this_.SIMULPORTCAPACITY = ? and
this_.ADSLPORTCAPACITY = ?))
(ii)SimpleExpression可以通过Restrictions工具类来创建,Restrictions提供了大量的静态方法;如:eq(等于)、ge(大于等于)、between等来方法的创建Criterion查询条件,使用Criteria进行查询,主要要清晰的是Hibernate提供了那些类和方法来满足开发中查询条件的创建和组装。

List cats = sess.createCriteria(Cat.class)
.add(Restrictions.like("name","Fritz%"))
.add(Restrictions.between("weight",minWeight,maxWeight))
.list();

可以使用org.hibernate.criterion.Order来为查询结果排序.

List cats = sess.createCriteria(Cat.class)
.add(Restrictions.like("name","F%")
.addOrder(Order.asc("name"))
.addOrder(Order.desc("age"))
.setMaxResults(50)
.list();

2.hibernate 注解方式(部分代码来源:http://www.cnblogs.com/hongten/archive/2011/07/20/2111773.html,附带文档链接

英文:http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/

中文:http://docs.jboss.org/hibernate/annotations/3.4/reference/zh_cn/html_single/

)

(1)实体类注解

//当前的类是一个持久化类,是FeedBackEty这个类。他映射了一个表t_feedback。
@Entity
@Table(name = "t_feedback")
public class FeedBackEty{
//…………
}

(2)类属性注解:

//指定主键生成策略,以后主键按此name生成
@GenericGenerator(name = "generator", strategy = "increment")
//指定主键
@Id
@GeneratedValue(generator = "generator")
//指定该属性对应的数据库表格字段 是否唯一 和 不为空
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
} public void setId(Integer id) {
this.id = id;
} //映射表中name这个字段 ,长度是500
@Column(name = "name", length = 500)
public String getName() {
return this.name;
} public void setName(String name) {
this.name = name;
}

(3)many to one  / one to many

Product.java  Category.java为例

多个product 可以对应一个category

Category.java

private Set<Product> products = new HashSet<Product>(0);
//级联操作:cascade = CascadeType.ALL
//延迟加载:fetch = FetchType.LAZY
//映射:mappedBy = "category"
//一对多方式
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "category")
public Set<Product> getProducts() {
return this.products;
} public void setProducts(Set<Product> products) {
this.products = products;
}

Product.java

private Category category;
//延迟加载:多对一方式
//关联信息:外键name = "category_id"
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "category_id")
public Category getCategory() {
return this.category;
} public void setCategory(Category category) {
this.category = category;
}

附加:

//用于注释pojo对象中的属性,被注释的属性将成为短暂的,不会持久化到数据库的“短暂”属性。也就是说实体类中可以有此属性用于赋值获取值,但是表格里面没有这个对应字段
@Transient
public Date getInsertDate() {
return insertDate;
}
public void setInsertDate(Date insertDate) {
this.insertDate = insertDate;
}

hibernate 学习知识总结的更多相关文章

  1. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  2. Hibernate入门1. Hibernate基础知识入门

    Hibernate入门1. Hibernate基础知识入门 20131127 前言: 之前学习过Spring框架的知识,但是不要以为自己就可以说掌握了Spring框架了.这样一个庞大的Spring架构 ...

  3. hibernate学习系列-----(2)hibernate核心接口和工作机制

    在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...

  4. Atitit learn by need 需要的时候学与预先学习知识图谱路线图

    Atitit learn by need 需要的时候学与预先学习知识图谱路线图 1. 体系化是什么 架构 知识图谱路线图思维导图的重要性11.1. 体系就是架构21.2. 只见树木不见森林21.3. ...

  5. Hibernate学习之——搭建log4j日志环境

    昨天讲了Hibernate开发环境的搭建以及实现一个Hibernate的基础示例,但是你会发现运行输出只有sql语句,很多输出信息都看不见.这是因为用到的是slf4j-nop-1.6.1.jar的实现 ...

  6. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  7. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  8. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  9. 我的hibernate学习记录(二)

    通过上一篇文章我的hibernate学习记录(一)基本上的入门了hibernate,但是,里面还有还多东西是通过迷迷糊糊的记忆,或者说copy直接弄进去的,所以这篇文章就需要对上篇的一些文件.对象进行 ...

随机推荐

  1. PHP责任链设计模式

    <?php //责任链设计模式 /** * 每个对象,储存着对自己上级的引用, * 如果自己处理不了,交给上一级. */ class board{ protected $power=1; pro ...

  2. 10月16日上午MySQL数据库作业设计表解析

    作业设计表:多张表存储学生成绩及各种信息 需要从表里面体现: 关于学生的:代号 姓名 性别 年龄 班级 关于课程的:代号 名称 关于老师的:代号 姓名 关于成绩的:例如:闫超--网页--90 要能查看 ...

  3. HTML学习笔记——列表和table

    1>有序列表.无序列表和自定义列表 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...

  4. jquery左边滚动,完毕后跳转回来

    代码如下 function in_scroll(){ $liW = ; $num = $(".in-cy li").size(); $ulW = $liW*$num; $(&quo ...

  5. Robot Framework--06 用户关键字User Keyword

    转自:http://blog.csdn.net/tulituqi/article/details/7906130 在我们做自动化案例的时候,用的最多的主要是用户关键字.说到关键字,大体上可以分为测试库 ...

  6. django笔记-模型数据模板呈现过程记录(多对多关系)

    首先,推荐一个网址:http://www.tuicool.com/articles/BfqYz2F,因为这里的比我的要有条理,更有利于各位的理解. 以下仅为为个人一次不完整的笔记: 环境:ubuntu ...

  7. JS中call和apply

    作用: 替换当前对象的方法中的this. 理解: call和apply是为了动态改变this出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作 ...

  8. GoLang之协程

    GoLang之协程 目前,WebServer几种主流的并发模型: 多线程,每个线程一次处理一个请求,在当前请求处理完成之前不会接收其它请求:但在高并发环境下,多线程的开销比较大: 基于回调的异步IO, ...

  9. Python之路【第八篇】python实现线程池

    线程池概念 什么是线程池?诸如web服务器.数据库服务器.文件服务器和邮件服务器等许多服务器应用都面向处理来自某些远程来源的大量短小的任务.构建服务器应用程序的一个过于简单的模型是:每当一个请求到达就 ...

  10. Python之路【第六篇】:面向对象编程相关

    判断类与对象关系 isinstance(obj, cls)  判断对象obj是否是由cls类创建的 #!/usr/bin/env python #-*- coding:utf-8 -*- class ...