Java 创建自定义Hibernate用户类型:查找当前实体表名称
我正在编写一个Hibernate CompositeUserType,为了将自定义对象序列化到JDBC,我需要知道我正在更新的表的名称(因为我的工具附带了一些配置) 我现在唯一能做到这一点的方法是用实体tablename显式地参数化我的用户类型,这是多余的,而且容易出错 有没有办法在“nullSafeSet”中获取此信息Java 创建自定义Hibernate用户类型:查找当前实体表名称,java,hibernate,Java,Hibernate,我正在编写一个Hibernate CompositeUserType,为了将自定义对象序列化到JDBC,我需要知道我正在更新的表的名称(因为我的工具附带了一些配置) 我现在唯一能做到这一点的方法是用实体tablename显式地参数化我的用户类型,这是多余的,而且容易出错 有没有办法在“nullSafeSet”中获取此信息 如果没有,是否有一种方法可以在用户类型初始化期间访问所属实体的定义(类似于参数的传递方式) 我做了类似的事情,需要在运行时基于其他一些设置设置自定义类型的属性。使用配置,您可以
如果没有,是否有一种方法可以在用户类型初始化期间访问所属实体的定义(类似于参数的传递方式) 我做了类似的事情,需要在运行时基于其他一些设置设置自定义类型的属性。使用配置,您可以使用自定义类型动态设置属性,如下所示:
for (Iterator iter=configuration.getClassMappings(); iter.hasNext();) {
PersistentClass pc = (PersistentClass)iter.next();
for (Iterator iter2=pc.getPropertyIterator(); iter2.hasNext();) {
Property property = (Property)iter2.next();
if (property.getType().getName().equals("your custom type")) {
SimpleValue v = (SimpleValue)property.getValue();
v.getTypeParameters().setProperty("table property", pc.getTable().getName());
}
}
}
显然,这里有很多假设(每个实体一个表,自定义类型是一个属性等等),但它应该可以工作
我还没有尝试过的另一种可能性是在nullSafeSet方法中使用PreparedStatement元数据,如:statement.getMetaData().getTableName(index)。我做了类似的事情,需要在运行时基于一些其他设置设置自定义类型的属性。使用配置,您可以使用自定义类型动态设置属性,如下所示:
for (Iterator iter=configuration.getClassMappings(); iter.hasNext();) {
PersistentClass pc = (PersistentClass)iter.next();
for (Iterator iter2=pc.getPropertyIterator(); iter2.hasNext();) {
Property property = (Property)iter2.next();
if (property.getType().getName().equals("your custom type")) {
SimpleValue v = (SimpleValue)property.getValue();
v.getTypeParameters().setProperty("table property", pc.getTable().getName());
}
}
}
显然,这里有很多假设(每个实体一个表,自定义类型是一个属性等等),但它应该可以工作
我没有尝试过的另一种可能性是在nullSafeSet方法中使用PreparedStatement元数据,如:statement.getMetaData().getTableName(index)