博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate-注解及配置
阅读量:6253 次
发布时间:2019-06-22

本文共 3284 字,大约阅读时间需要 10 分钟。

联合主键:

一、将联合主键的字段单独放在一个类中,该类需要实现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
valueList = new ArrayList
();

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");

 

转载于:https://www.cnblogs.com/DennyZhao/p/7132269.html

你可能感兴趣的文章
ISA Server 2006简介
查看>>
TCP-IP协议详解(13) DNS协议
查看>>
httpd网站服务
查看>>
mysql启动报错处理
查看>>
4 ways to pass parameter from JSF page to backi...
查看>>
Delphi中获取Unix时间戳及注意事项
查看>>
rvm使用
查看>>
iOS 开发一些小技巧
查看>>
8月5日起OCP电子证书正式推行
查看>>
【原创】DataNode源码演绎 第一回
查看>>
垃圾回收概念与算法
查看>>
JDBC读取MySQL的BLOB类型
查看>>
转帖:Lotus Notes安装和使用的常见问题
查看>>
IconFont 图标svg
查看>>
exchange 2013 邮箱服务器主要服务功能概览
查看>>
[技巧] 双系统WIN7启动菜单英文变中文方法
查看>>
观察网络性能时如何选择工具
查看>>
使用spring-loaded实现应用热部署
查看>>
CentOS下zabbix监控mysql5.6版本主从
查看>>
Docker系列教程08-Dockerfile实战
查看>>