package com.ly.commons;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.hibernate.HibernateException;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.id.IdentifierGenerator;
public class MyKey implements IdentifierGenerator {
public Serializable generate(SessionImplementor ss, Object arg1)
throws HibernateException {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyymmdd");
String str =sdf.format(date);
String sql ="select USERSQL.nextval FROM dual";
String id="";
Connection conn =ss.getJDBCContext().getConnectionManager().getConnection();
try {
PreparedStatement ps =conn.prepareStatement(sql);
ResultSet res =ps.executeQuery();
while(res.next()){
id=res.getString(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
int size =6-id.length();
for(int i=0;i<size;i++){
id="0"+id;
}
return Long.parseLong(str+id);
}
}
//-------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.ly.domain.Users" table="USERS" schema="SCOTT">
<id name="userid" type="java.lang.Long">
<column name="USERID" precision="22" scale="0" />
<generator class="com.ly.commons.MyKey" />
</id>
<property name="username" type="java.lang.String">
<column name="USERNAME" length="20" />
</property>
<property name="image" type="java.lang.String">
<column name="IMAGE" />
</property>
</class>
</hibernate-mapping>
分享到:
相关推荐
为了使这个复合主键能够正确地参与到数据库的关联操作中,我们还需要创建一个对应的`@TableGenerator`,以便为每个复合主键生成一个唯一的序列号。这通常不是必需的,因为复合主键通常是业务逻辑决定的,而不是自增...
三、配置复合主键生成策略 在Hibernate中,我们还需要为复合主键指定生成策略。这可以通过在`@Id`或`@EmbeddedId`的类中定义`@GeneratedValue`注解来完成。然而,对于复合主键,一般不推荐使用自增策略,因为复合...
equals方法用于比较两个复合主键对象是否相等,而hashCode方法则用于生成对象的哈希值,这对于实体管理尤其重要,因为实体管理器在执行find等操作时会依赖这些方法。 下面是一个具体的复合主键类示例——`...
这篇文档将介绍如何使用Hibernate注解来生成复合主键或嵌入式主键。 复合主键(Composite Key)是指由两个或更多个列共同构成的唯一标识,而嵌入式主键(Embedded Key)则是将主键字段嵌入到实体类内部。在不使用...
如果使用Hibernate开发legacy的数据库应用,对于数据库表中有使用字符串作为主键或者使用复合主键情况,那么对于这些情况的影射档是比较麻烦的。该示例应用演示了两张表ITEM和CATEGORY_ITEM表有主外键关系,并且ITEM...
- 在操作联合主键的实体时,需要特别注意主键的生成策略,因为JPA不会自动为联合主键生成值,除非明确指定。 ### 实践应用 在实际开发中,联合主键常常出现在需要多对多关联的场景,例如上述的`ProductCategory`...
支持自增主键,复合主键,外键关联。 生成Hibernate POJO类,Dao类,Service类,Action类。 生成保存,删除,修改,批量保存,批量修改,批量删除,按条件查询,分页查询等功能。 生成各大主流框架配置文件及JSP页面...
"NHibernate代码生成模板v1_1"着重于修复了v1.0版本的一个主要问题,即在处理复合主键时,实体类在运行时会引发Nhibernate错误。在数据库设计中,复合主键是指由两个或更多列共同组成的唯一标识符。在ORM框架中,...
在IT领域的数据库设计与操作中,处理具有多主键(复合主键)的表是一项常见但又复杂的任务。本文将围绕“ssh多主键插入”这一主题,深入探讨如何在Struts、Spring和Hibernate(SSH框架)中实现对具有多主键结构的...
如果希望使用自动生成,可能需要结合`@GeneratedValue`注解和特定的生成器策略,但这在联合主键中并不常见,因为主键通常是业务相关的。 4. **关联和查询** 当使用联合主键时,关联其他实体或执行查询时,需要确保...
如果需要联合主键,可以使用多个`@Id`注解或者自定义的复合主键类。 MyBatis-Plus是MyBatis的一个扩展,它提供了更丰富的功能,包括自动填充主键。在某些情况下,开发者可能会遇到MyBatis-Plus主键生成的坑,例如,...
支持自增主键,复合主键,外键关联。 生成hibernate pojo类,dao类,service类,action类。 生成保存,删除,修改,批量保存,批量修改,批量删除,按条件查询,分页查询等功能。 生成各大主流框架配置文件...
在Android开发中,ORM(Object-Relational Mapping)框架如ORMLite被广泛用于简化数据库操作,使得开发者能够更方便...在测试过程中,一定要确保`getId()`方法生成的唯一标识符与查询条件相匹配,防止出现意外的问题。
6. 设置 Id Generator:在这里,可以选择 Id Generator 的类型,例如,可以选择 identity,让数据库提供主键生成机制,也可以选择 assigned,让外部程序负责生成主键。 7. 处理主外键关系:如果存在主外键关系,可以...
6. `<join>`:用于处理复合主键或者跨表的复杂映射。 生成工具的工作原理大致如下: 1. 连接数据库:工具会首先连接到指定的数据库,获取数据库的元数据信息,如表名、列名、约束等。 2. 分析表结构:根据数据库中...
通过这种方式,你可以自定义实体的映射行为,比如忽略某些字段、定义复合键或者自增主键等。 在项目中,选择数据表后,右侧会即时生成对应的C#代码,包括实体类代码和配置代码。这一步骤大大提高了开发效率,因为...
1. ****:用于复合主键的映射。 2. ****:定义乐观锁版本字段,用于并发控制。 3. ****:映射类内的复杂类型或嵌入式对象。 4. **, , , **:这些集合类型的映射元素,用于处理一对多或多对多的关系。 在实际应用中...
单字段主键是指由一个字段组成的主键,而复合主键是指由多个字段组成的主键。 在MySQL数据库中,主键可以使用AUTO_INCREMENT机制来自动生成主键值。这可以简化数据库设计和开发的工作。 但是,MySQL数据库主键也...
类似SQLServer2000的管理界面,方便平常在代码编辑的时候想查看数据库的信息,并且可以很直观的查看字段类型,长度,主键,默认值等详细信息,省去了在代码和数据库管理器之间的来回切换,方便快捷。 (1)支持多种...
5. @Id和@IdClass注解:标识主键字段或复合主键类。 6. @Column注解:标记每个属性对应的数据库列名,可以设置额外的列属性,如长度、是否可为空等。 7. 其他MyBatis注解:如@Version(乐观锁)、@ResultMap(结果...