<id name="id" column="MY_ID">
<generator class="sequence">
<param name="sequence">MY_SEQUENCE</param>
<param name="parameters">
START WITH 1 INCREMENT BY 1
</param>
</generator>
</id>可以通过注解使用Hibernate标识符生成器,即使没有直接的注解可用:@Entity
@Table(name = "TBL_MYENTITY")
@org.hibernate.annotations.GenericGenerator(name = "hibernate-uuid", strategy = "uuid")
public class MyEntity {
@Id
@GeneratedValue(generator = "hibernate-uuid")
@Column(name = "My_ID")
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;
}
} @GenericGenerator Hibernate扩展可以用来给Hibernate标识符生成器提供一个名称,在这个例子中为hibernate-uuid。然后这个名称被标准的generator属性引用。<!--全局标识符生成器-->
<!--这声明了名称为MY_SEQUENCE的数据库序列,带有初始值123,可以用作数据库标识符生成的来源,并且每当持久化引擎需要标识符时,它就应该获得20个值。-->
<sequence-generator name="mySequenceGenerator"
sequence-name="MY_SEQUENCE"
initial-value="123"
allocation-size="20" />为了把这个标识符生成器应用到特定的实体,就利用它的名称:@Entity
@Table(name = "TBL_MYENTITY")
public class MyEntity {
@Id
@GeneratedValue(generator = "mySequenceGenerator")
@Column(name = "My_ID")
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}如果在实体级声明了另一个同名的生成器,且在class关键字之前,它就会覆盖全局的标识符生成器。5)实现数据库命名约定
<class name="Item"
dynamic-insert="true"
dynamic-insert="true">
</class> 注意:dynamic-insert="true"支持动态SQL哦哦@Entity
@org.hibernate.annotations.Entity(
dynamicInsert = true,
dynamicUpdate = true
)
public class Item {
}来自Hibernate包的第二个@Entity注解使用额外的选项扩展了JPA注解,包括dynamicInsert和dynamicUpdate。<hibernate-mapping default-access="field">
<class name="Bid" mutable="false">
</class>
</hibernate-mapping> 如果没有公开类的任何属性的公有设置方法,POJO就是不可变的——所有值都在构造函数中设置。不用私有设置方法,而是经常更喜欢通过Hibernate对不可变的持久化进行直接的字段访问,因此不必编写没用的访问方法。可以用注解映射一个不可变的实体:@Entity
@org.hibernate.annotations.Immutable
@org.hibernate.annotations.AccessType("field")
public class Bid {
}1)在class中声明mutable="false"或@Immutable<hibernate-mapping>
<import class="auction.model.Auditable" rename="IAuditable"/>
</hibernate-mapping>现在可以用HQL查询(如from IAuditable)来获取实现auction.model.Auditable接口的类的所有持久化实例。@Entity(name="AuctionItem")
public class Item{
}
<hibernate-mapping package="auction.model">
<class name="Item" table="TBL_ITEM">
</class>
</hibernate-mapping>
<property name="description"
column="`DESCRIPTION`"/>public class CENamingStrategy extends ImprovedNamingStrategy {
private static final long serialVersionUID = -5538665442917666989L;
public String classToTableName(String className) {
return "CE_" + StringHelper.unqualify(className);
}
public String propertyToColumnName(String propertyName) {
return propertyName;
}
public String tableName(String tableName) {
return "CE_" + tableName;
}
public String columnName(String columnName) {
return columnName;
}
} 仅当<class>映射没有指定显式的table名称时才调用classToTableName()方法。如果属性没有显式的column名称,就调用propertyToColumnName()方法。当声明了显式的名称时,则调用tableName()和columnName()方法。<class name="BankAccount">将导致CE_BANKACCOUNT作为表的名称。
<class name="BankAccount" table="BANK_ACCOUNT">那么CE_BANK_ACCOUNT就是表的名称。此时,BANK_ACCOUNT就被传递到tableName()方法。
Configuration cfg = new Configuration(); cfg.setNamingStrategy(new CENamingStrategy()); SessionFactory sessionFactory = cfg.configuration().buildSessionFactory();这允许你有多个基于相同映射文件的SessionFactory实例,每一个都使用不同的NamingStrategy。
Hibernate实战_笔记24(主键生成策略、类映射选项),布布扣,bubuko.com
Hibernate实战_笔记24(主键生成策略、类映射选项)
原文:http://blog.csdn.net/com185272358/article/details/21330155