160727、自定义hibernate主键生成策略生成字符串+数字自增长
2016-07-28 12:14
363 查看
需求:需要自增长注解如MyId0001、MyId0002、MyId0003 实现:实现这个接口org.hibernate.id.IdentifierGenerator 一、MyIdGenerator.java(测试用,实际项目中获取链接等可以改变) import java.io.Serializable; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.commons.lang.StringUtils; import org.hibernate.HibernateException; import org.hibernate.engine.SessionImplementor; import org.hibernate.id.IdentifierGenerator; public class MyIdGenerator implements IdentifierGenerator{ @Override public Serializable generate(SessionImplementor session, Object object) throws HibernateException { String prefix = "MyId"; Connection connection = session.connection(); try { PreparedStatement ps = connection .prepareStatement("SELECT nextval ('seq_id') as nextval"); ResultSet rs = ps.executeQuery(); if (rs.next()) { int id = rs.getInt("nextval"); String code = prefix + StringUtils.leftPad("" + id,3, '0'); log.debug("Generated Stock Code: " + code); return code; } } catch (SQLException e) { log.error(null, e); throw new HibernateException( "Unable to generate Stock Code Sequence"); } return null; } } 二、配置hibernate主键生成策略 基于配置文件的hibernate(TestHibernateIdentifier.xml) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.fire.front.entity"> <class name="TestHibernateIdentifier" table="test_hibernate_identifier" dynamic-update="true"> <meta attribute="sync-DAO">false</meta> <cache usage="read-write"/> <id name="id" type="string" column="id"> <generator class="com.gwold.common.util.MyIdGenerator"/> </id> <property name="name" type="string" column="name" length="40"/> </class> </hibernate-mapping> 基于注解的方式 import java.io.Serializable; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.GenericGenerator; public class TestHibernateIdentifier implements Serializable{ @Id @GenericGenerator(name="seq_id", strategy="com.gwold.common.util.MyIdGenerator") @GeneratedValue(generator="seq_id") @Column(name = "id", unique = true, nullable = false, length = 20) private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
相关文章推荐
- MVC学习系列13--验证系列之Remote Validation
- 用nodejs实现爬虫后使用mongodb存贮
- 内存泄漏、资源泄漏、空指针等问题的分析与总结
- Android EditText得到和失去焦点时,自定义处理内容
- typename用法
- Nginx开启Gzip压缩功能
- 题目34 韩信点兵
- xml pull 解析 XlistView 上拉加载 下拉刷新
- jQuery实现文本域内提示文字,当鼠标点击进文本域后自动消失,文本域失去鼠标焦点后显示提示文字或显示用户输入的文字。
- 递归问题
- NuGet 问题及小技巧
- Android Studio NDK 入门demo
- 使用Swift开发一个MacOS的菜单状态栏App
- padding margin;gravity,layout_gravity
- 使用Swift开发一个MacOS的菜单状态栏App
- sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
- 100、布局转换成图片
- jquery中attr和prop的区别
- PyGobject(三十四)布局容器之Assistant
- Fragment + ViewPager实现滑动页面