因为CountryCode是从其它系统导过来的,有时出现了空格,所以自定义了一个TrimmedString
<hibernate-mapping>
<class name="au.com.at2.dictionaries.country.Country" table="COUNTRY" lazy="false">
<id name="countryCode" column="CountryCode" type="au.com.at2.hibernate.TrimmedString
" />
<property name="countryName" column="CountryName"/>
<property name="internationalPrefixCode" column="InternationalPrefixCode"/>
</class>
<query name="Country.findAll" cacheable="true"
cache-region="/au/com/at2/dictionaries/AllCountries">
from Country c order by c.countryName
</query>
</hibernate-mapping>
public class TrimmedString implements UserType {
public TrimmedString() {
super();
}
public int[] sqlTypes() {
return new int[] { Types.CHAR };
}
public Class returnedClass() {
return String.class;
}
public boolean equals(Object x, Object y) throws HibernateException {
return (x == y) || (x != null && y != null && (x.equals(y)));
}
public Object nullSafeGet(ResultSet rs, String[] names, Object owner)
throws HibernateException, SQLException {
String val = rs.getString(names[0]);
return val != null ? val.trim() : null;
}
public void nullSafeSet(PreparedStatement st, Object value, int index)
throws HibernateException, SQLException {
String val = (String) value;
st.setString(index, val != null ? val.trim() : null);
}
public Object deepCopy(Object value) throws HibernateException {
if (value == null)
return null;
return new String((String) value);
}
public boolean isMutable() {
return false;
}
public Object assemble(Serializable serializable, Object object)
throws HibernateException {
return serializable;
}
public Serializable disassemble(Object object) throws HibernateException {
return (Serializable) object;
}
public int hashCode(Object object) throws HibernateException {
return object.hashCode();
}
public Object replace(Object object, Object object1, Object object2)
throws HibernateException {
return object;
}
分享到:
相关推荐
2. **实现Hibernate的Type接口**:这个接口是自定义数据类型的核心,它定义了如何在Java对象和SQL值之间进行转换。你需要实现`nullSafeGet()`和`nullSafeSet()`方法,分别用于从ResultSet中读取数据和将数据写入...
本文将深入探讨如何使用Hibernate实现领域对象的自定义字段,这涉及到对Hibernate核心概念的理解以及自定义类型的应用。 首先,我们需要了解Hibernate的核心概念。Hibernate主要通过配置文件(hibernate.cfg.xml)...
使用自定义类型时,你需要在实体类的属性上使用`@Type`注解,指定自定义类型的实现类,使得Hibernate在操作这些属性时能够调用我们定义的转换逻辑。 例如,如果你有一个自定义日期时间类型,可以这样使用: ```java...
@Type(type = "org.hibernate.type.EnumType", parameters = { @Parameter(name = "enumClass", value = "com.example.Status"), @Parameter(name = "useNamed", value = "true")}) private Status status; } ``...
@ColumnResult(name = "result", type = Integer.class) } ) } ) public class MyEntity { // ... } ``` 在这个例子中,`MyFunctionResult`是一个简单的Java类,包含一个`result`属性来接收函数的返回值。...
- `TYPE`:自定义类型映射,需要实现`org.hibernate.usertype.UserType`接口,可以自定义存储和读取的逻辑。 2. **配置枚举类型映射**: 在Hibernate的映射文件(.hbm.xml)中,可以使用`<typedef>`元素定义枚举...
Hibernate提供了一个专门用于枚举类型映射的类`org.hibernate.type.EnumType`。通过这个类,我们可以选择将枚举实例的`name`或者`ordinal`映射到数据库。具体的配置是在Hibernate的映射文件(通常是.hbm.xml文件)中...
- 如果使用的是HBM(Hibernate Mapping)文件,需要在对应字段上配置`type`属性,指向自定义的`UserType`全限定类名。 通过以上步骤,你可以确保Hibernate在处理MySQL的`TEXT`字段时能够正确地进行序列化、反序列...
- **明确日期时间格式**:在Hibernate的配置文件中,可以使用`<property name="hibernate.jdbc.time_zone">`来指定时区,或者在实体类中使用`@Type`注解自定义日期时间的转换器。 - **修改实体类属性**:将Date类型...
Hibernate通过事件监听机制处理对象生命周期的各个阶段,如`PreInsertEvent`、`PostUpdateEvent`等,开发者可以通过实现相应的监听器接口,自定义对象持久化过程的行为。 9. **org.hibernate.criterion package** ...
- **Type**接口:定义了Hibernate的映射类型,将Java对象映射到数据库关系数据。预定义了许多实现,如PrimitiveType(Java基本类型)、DateType(日期类型)、BinaryType(字节数组类型)。此外,还可以通过实现...
而“dtd”是指文档类型定义(Document Type Definition),在Hibernate中,DTD文件用于定义XML配置文件的结构和约束。例如,`hibernate-configuration-5.0.dtd`定义了`hibernate.cfg.xml`的结构,包含数据库连接信息...
-- 自定义类型映射 --> </type-mapping> </hibernate-reverse-engineering> ``` **4. 代码生成** Hibernate Tools还支持基于实体类或映射文件生成DAO层和Service层代码。在Eclipse中,右键选择项目,依次点击...
@Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface MyCustom { String message() default "Invalid value"; } public class MyCustomValidator ...
- `@Type`: 使用自定义的Hibernate类型,如日期时间格式等。 以上仅是Hibernate Annotation部分核心概念的简述,实际使用中还需要根据项目需求和最佳实践来灵活应用。深入理解和熟练掌握这些注解,能极大地提升...
@Target(ElementType.FIELD) public @interface Email { String message() default "无效的电子邮件地址"; Class[] groups() default {}; Class[] payload() default {}; } ``` 然后编写对应的验证器 `...
8. **Type System**:Hibernate的类型系统将Java类型和数据库类型关联起来,如StringType对应VARCHAR,IntegerType对应INT。这使得Hibernate能自动处理类型转换。 在使用hibernate-core-3.3.1.GA这个版本时,开发者...
5. **org.hibernate.type**:此包包含了Hibernate中各种数据类型,如基本类型、复合类型和特殊类型。这些类型定义了如何将Java类型转换为数据库的列类型,反之亦然。 6. **org.hibernate.mapping**:这个包主要处理...
Hibernate Validator 是一个强大的Java Bean验证框架,它基于JSR 303(Bean Validation)和JSR 349(Bean Validation 1.1)标准,提供了丰富的验证注解和自定义验证规则。在本文中,我们将深入探讨Hibernate ...
总结来说,通过自定义Hibernate类型,可以方便地在Java对象和数据库之间处理JSON数据,避免了不必要的表设计和查询复杂性。这种方法特别适用于存储只读的、结构复杂的非结构化数据。在实际应用中,根据业务需求,...