hibernate注解影射表
@MappedSuperclass的用法
用在实体的继承过程中的父类上;
父类Cat
package com.xj.model; import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass; @MappedSuperclass
public class Cat {
private Long id;
private String name;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
子类1 BeijingCat
package com.xj.model; import javax.persistence.Entity;
import javax.persistence.Table; @Entity
@Table(name="t_beijingcat")
public class BeijingCat extends Cat {
private String beijing; public String getBeijing() {
return beijing;
} public void setBeijing(String beijing) {
this.beijing = beijing;
} }
子类2 ShanghaiCat
package com.xj.model; import javax.persistence.Entity;
import javax.persistence.Table; @Entity
@Table(name="t_shanghaiCat")
public class ShanghaiCat extends Cat {
private String shanghai; public String getShanghai() {
return shanghai;
} public void setShanghai(String shanghai) {
this.shanghai = shanghai;
}
}
结果生成 两张表t_beijingcat、 t_shanghaicat
如果不用@MappedSuperclass 而用@Entity替换的话,只会生成一张cat表,字段有:id,name,shanghaicat,bejingcat
主键生成规则
目前@注解支持4种生成策略:
GenerationType.AUTO:根据数据库自己决定
GenerationType.TABLE:使用指定表决定主键的取值
GenerationType.SEQUENCE:使用sequence决定主键取值,适合支持sequence的数据库。
GenerationType.IDENTITY:identity类型的主键
@SequenceGenerator
父类
@MappedSuperclass
public abstract class AutoIDEntity implements Serializable { private static final long serialVersionUID = 1L; protected Long id; protected Long version; @Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="SEQ_STORE")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Version
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}
}
子类
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate=true)
@SequenceGenerator(name="SEQ_STORE",sequenceName="SEQ_PAYMENTTEMPLATE_ID",allocationSize=1)
@Table(name = "TBL_NMC_PAYMENTTEMPLATE")
public class PaymentTemplate extends AutoIDEntity { private static final long serialVersionUID = 1L; /**
* 表达式(销卡通道、通道占比(针对发卡销卡)、是否最后处理通道)
*/
private String express;
/**
* 模板名称
*/
private String name;
/**
* 卡种
*/
private CardType cardType;
/**
* 描述信息
*/
private String describe;
/**
* 开关
*/
private Status status;
/**
* 创建者
*/
private String operator;
/**
* 更新时间
*/
private Date updateDate; @Column(columnDefinition = "VARCHAR(2500)")
public String getExpress() {
return express;
} public void setExpress(String express) {
this.express = express;
} @Column(columnDefinition = "VARCHAR(50)")
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Enumerated(value = EnumType.STRING)
@Column(columnDefinition = "VARCHAR(20)")
public CardType getCardType() {
return cardType;
} public void setCardType(CardType cardType) {
this.cardType = cardType;
} @Column(columnDefinition = "VARCHAR(100)")
public String getDescribe() {
return describe;
} public void setDescribe(String describe) {
this.describe = describe;
} @Enumerated(value = EnumType.STRING)
@Column(columnDefinition = "VARCHAR(20)")
public Status getStatus() {
return status;
} public void setStatus(Status status) {
this.status = status;
} @Column(columnDefinition = "VARCHAR(100)")
public String getOperator() {
return operator;
} public void setOperator(String operator) {
this.operator = operator;
} public Date getUpdateDate() {
return updateDate;
} public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
} }
这是其中一个实体类,我使用的Oracle的数据库,主键采用oracle的序列,但是问题来了,我发现我的id增长不是以
1
递增,而是以
50
递增的,当时我就很纳闷了,后面我就上网查,原来也有人遇到了这个问题,原来是少了allocationSize=
1
这个,原来JPA默认的递增大小是
50
。同时initialValue默认为
0
,一般都是设置为initialValue=
1
修改后的如下所示:
@SequenceGenerator(name="SEQ_STORE",sequenceName="SEQ_PAYMENTTEMPLATE_ID",allocationSize=1)
还有一个要注意问题:注解到底是写在 get方法上,还是写在属性上,这个一定要统一,千万不能混淆使用,我推荐写在getter方法上。
Hibernate 使用Enumerated_EnumType映射枚举字段
Hibernate 使用Enumerated_EnumType映射枚举字段
Enumerated 和 EnumType 是 jpa 的两个注解。这两个注解用来映射枚举字段
枚举类
package com.lyx; /**
* Created by liyanxin on 2014/12/24.
*/
public enum Gender { MAIL("男性"), FMAIL("女性"); private String value; private Gender(String value) {
this.value = value;
} @Override
public String toString() {
return this.value;
}
}
实体类
package com.lyx; import java.io.Serializable; import javax.persistence.*; @Entity
@Table(name = "tb_user")
public class User implements Serializable { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private int age; @ManyToOne
@JoinColumn(name = "role_id", unique = false, nullable = false)
private Role role; @Enumerated(EnumType.STRING)
@Column(name = "user_gender")
private Gender gender; .......................
}
hibernate注解影射表的更多相关文章
- Hibernate注解使用以及Spring整合
Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...
- Hibernate Annotation (Hibernate 注解)
简介: 传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载. 然而现在借助新的 Hibernate Annotation 库, ...
- hibernate注解配置举例说明
Hibernate Annotation (Hibernate 注解) 进入:http://www.hibernate.org 说明文档: 英文:http://docs.jboss.org/h ...
- Hibernate注解(一):基本注解
在Hibernate中使用注解,主要是为了替代映射文件,完成“类到表,属性到字段”的映射.JPA提供了一套功能强大的注解.Hibernate直接使用了JPA的这套注解.当然,对于JPA中的一些不足,H ...
- Hibernate注解----关联映射注解以及课程总结详解----图片版本
上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...
- Hibernate注解----类级别注解以及属性注解详解----图片版本
这篇文章是我在慕课网上学习Hibernate注解的时候进行手机以及整理的笔记. 今天把它分享给大家,希望对大家有用.可以进行收藏,然后需要的时候进行对照一下即可.这样能起到一个查阅的作用. 本文主要讲 ...
- hibernate注解随笔—10月8日
hibernate注解(herbinate4 jar包注解可用,使用hibernate3.3注解失败) 如果javabean与数据库中表名一致(不区分大小写),则注解不用写@Table(name=&q ...
- Hibernate注解映射联合主键的三种主要方式
今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...
- 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...
随机推荐
- Battle Over Cities (25)(DFS、连通图)
It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...
- gc overhead limit exceeded
eclipse-- gc overhead limit exceeded 修改内存不足的方法如下: Eclipse报错:gc overhead limit exceeded eclipse 原因是Ec ...
- Linux内核中的常用宏container_of
Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址. Containe ...
- 【js】IE、FF、Chrome浏览器中的JS差异介绍
如何判断浏览器类型 转:http://www.cnblogs.com/carekee/articles/1854674.html 1.通过浏览器特有的对象 如ie 的ActiveXObject ff ...
- jquery pass parameter to ajax callback
$('.del').on('click', function () { var id = $(this).attr('id'); var url = '/m/g2_content_del/' + id ...
- Mapped Statements collection does not contain value for TaskMapper.selectByPrimaryKey
Mapped Statements collection does not contain value for后面是什么类什么方法之类的: 错误原因有几种: 1.mapper.xml中没有加入name ...
- php数组内容分页的例子(转)
php数组内容分页代码 时间:2016-03-04 23:46:34来源:网络 导读:php数组内容分页代码,当前页如果大于总页数,当前页为最后一页,分页显示时,应该从多少条信息开始读取数据. p ...
- 839. Optimal Marks - SPOJ
You are given an undirected graph G(V, E). Each vertex has a mark which is an integer from the range ...
- jquery中json数据转换为字典
首先在前台页面中的json数据为 var recipe = {}; recipe["name"] = $("#name").val(); recipe[&quo ...
- centos64位安装32位C/c++库
yum install glibc.i686 glibc-devel.i686 yum install libstdc++.i686yum install libstdc++-devel.i686yu ...