hibernate-注解及配置
联合主键:
一、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@Id
二、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@EmbeddedId
三、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并要重写equals和hashcode.最后在主类中(该类包含联合主键类中的字段)将联合主键字段都注解为@Id,并在该类上方将上这样的注解:@IdClass(联合主键类.class)
/**
* 判断传入的参数是否是自己需要的参数
*/
@Override
public boolean equals(Object obj) {
if(obj == null || !(obj instanceof PkUserLog)){
return false;
}
PkUserLog pk = (PkUserLog) obj;
if(pk.orgPrefix.equals(this.orgPrefix) && pk.synchronizationDate.equals(this.synchronizationDate)){
return true;
}else{
return false;
}
}
/**
* hash值唯一化
*/
@Override
public int hashCode() {
int result1 = this.orgPrefix == null ? 0 : this.orgPrefix.hashCode();
int result2 = this.synchronizationDate == null ? 0 :this.synchronizationDate.hashCode();
return result1+result2;
}
主键生成策略:自定义主键
@GeneratedValue(strategy = GenerationType.IDENTITY,generator="paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "assigned")
主键生成策略:sequence
/** 主键 **/
@SequenceGenerator(name="userIdPk",allocationSize=1,initialValue=1,schema="apps",sequenceName="user_s")
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="userIdPk")
如果不指定sequence名,则会调用hibernate内置sequence,会在DB中建立一个hibernate_sequence。
如果不设置initialValue=1会出现序号从某个负值开始。initialValue表示从几开始,allocationSzie表示跨度,尽管在数据库建立sequence时已经设置但还是会出现负值。因此添加此设置。@SequenceGenerator也可设置在类上面。
对象类设置:
@Entity //实体类
@Table(name="mhr_suggestion") //表名
@Column(name="create_date") //列名
@DateTimeFormat(pattern="yyyy-mm-dd hh:mi:ss") //日期格式Json转化
@Transient // 非数据库字段
@OrderBy(value="DESC") //排序
@OneToMany
一个表中的某个字段是另一个表的主要外键,因此可以做两个表的关联设置。不一定要设置外键。如果设置有外键可不设置JoinColumn或mapped。
@OneToMany(targetEntity=FlexValueDO.class,fetch=FetchType.EAGER,mappedBy="User[当子表存在@ManyToOne双向关联时,可采用此方式]")
@JoinColumn(name="data_id[从表的关联columnName]",nullable=true,updatable=true,insertable=true,referredBy="user_id[主表与之关联的columnID,如果不设置默认用主键]",)
@OrderBy("createDate[对象列名] ASC")list结果排序
private List<FlexValueDO> valueList = new ArrayList<FlexValueDO>();
oneToMany有5个属性:
fetch - 配置加载方式。default LAZY,取值有
Fetch.EAGER - 及时加载,多对一默认是Fetch.EAGER ,如果遇到session关闭,将懒加载换成立即加载。
Fetch.LAZY - 延迟加载,一对多默认是Fetch.LAZY
cascade - 设置级联方式,default {},取值有:
CascadeType.PERSIST - 保存
CascadeType.REMOVE - 删除
CascadeType.MERGE - 修改
CascadeType.REFRESH - 刷新
CascadeType.ALL - 全部
targetEntity --设置对应的对象
targetEntity=FlexValueDO.class
mappedBy -- 当双向关联(bidirectional)时,指向子类的父类对象名。default '',
注意:mappedBy和JoinColumn不能重用。
orphanRemoval -- default false,删除孤立外键对象,即外键关联的对象不存在时,将空关联的对象删除。
@NamedQueries 和 @NamedQuery
用于提前将sql写好,在使用时直接使用,根据name即可获取。
@NamedQueries:多个nameQuery时,使用这个进行包装。
@Entity
@Table(name="re_items")
@NamedQueries({
@NamedQuery(name="findByCode",query=" from ReItemsDO where itemCode=:itemCode"),
@NamedQuery(name="findByType",query=" from ReItemsDO where itemType=:itemType")
})
@SequenceGenerator(allocationSize=1,initialValue=1000,name="reItemsS",sequenceName="re_items_s")
public class ReItemsDO implements Serializable {
在使用时,直接调用即可:
this.findByNamedParam("findByCode", "itemCode", "34555");
hibernate-注解及配置的更多相关文章
- Hibernate 注解方式配置
在Hibernate3之后就可以使用注解的方式去配置.而且在工作中我们使用的更多的也是注解方式去配置项目,所以还有一部分使用配置文件去配置的一些关系就不在此去一一举例,需要了解的朋友可以去查看Hibe ...
- Hibernate注解方式配置-继承关系
在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class).Joined策略(table per subclass)和Table_PER_Class策略. 1.单表继承 ...
- Hibernate注解配置
在之前的第一次对框架的实际应用中,我使用的是Hibernate的xml配置方法,xml配置方法非常繁琐, 还是推荐所有使用Hibernate的人使用注解方式进行配置,在这篇文章中,我将列举出我们常用的 ...
- 。。。Hibernate注解配置的注意事项。。。
今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...
- Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式
①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...
- hibernate注解配置举例说明
Hibernate Annotation (Hibernate 注解) 进入:http://www.hibernate.org 说明文档: 英文:http://docs.jboss.org/h ...
- Hibernate注解使用以及Spring整合
Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...
- 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...
- Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...
- Hibernate 注解 没有加@Column一样会在数据库创建这些字段
Hibernate 注解 没有加@Column一样会在数据库创建这些字段 如下一个注解类: package com.hyy.hibernate.one_to_many.domain; import j ...
随机推荐
- 获取js 文件传递的参数并使用json2进行json数据转换
主要的技术就不用详细进行介绍了,就是使用js文件进行参数的传递,用途有一下几个: 1,进行js的版本控制. 2,获取参数并,进行一些额外功能的添加(比如使用js 进行用户验证,设计开发API (一些开 ...
- NOSQL之REDIS
Redis是NoSQL中比较常典型的一个非关系型数据库,在日常工作中也是最为常见的.Redis是一个由C语言编写的开源的.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据 ...
- python之 数据类型判定与类型转换
一. 判断数据类型 0.type(x)type()可以接收任何东西作为参数――并返回它的数据类型.整型.字符串.列表.字典.元组.函数.类.模块,甚至类型对象都可以作为参数被 type 函数接受. & ...
- Angular 4 表单
一. 模板表单 1. 如下图 2. code 3. 效果图 二.响应式表单 1. 增加ReactiveFormsModule 2.响应式表单用到的类和指令 3. 控制器代码 4. html <! ...
- 深入理解ASP.NET MVC(2)
系列目录 请求是如何进入MVC框架的(inbound) 当一个URL请求到来时,系统调用一个注册的IHttpModules:UrlRoutingModule,它将完成如下工作: 一.在RouteTab ...
- 【selenium】HTMLTestRunner测试报告生成
__author__ = 'Administrator' #coding=utf-8 from selenium import webdriver from selenium.webdriver.co ...
- win xp 安装 VS2010 时要重启是因为没安装WINDOWS INSTALLER 4.5
win xp 安装 VS2010 时要重启是因为没安装WINDOWS INSTALLER 4.5. 无意间看到VS2010安装列表中有一项是 WINDOWS INSTALLER 4.5 . 装这个玩意 ...
- 字符串strip相关函数
s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除序列的所有字符,但只要遇到非rm序列中的字符就停止s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的所有字符,,但只 ...
- $(function(){}) ,$(document).ready(function(){}),window.onload = function(){...},$(window).load(function(){...})区别
1. 写法: $(function(){}) ,$(document).ready(function(){})是一样的 2. 时间: window.onload和$(window).load ...
- 【H3C交换机】cpu各个进程的详细说明
display cpu-usage命令用来查看设备CPU占用率的统计信息,以及各个进程的cpu占用率. 各个进程详细说明如下,不同软件版本.盒式和框式的cpu进程略有不同,详细信息可以查看手册中的命令 ...