Java 创建自定义Hibernate用户类型:查找当前实体表名称

Java 创建自定义Hibernate用户类型:查找当前实体表名称,java,hibernate,Java,Hibernate,我正在编写一个Hibernate CompositeUserType,为了将自定义对象序列化到JDBC,我需要知道我正在更新的表的名称(因为我的工具附带了一些配置) 我现在唯一能做到这一点的方法是用实体tablename显式地参数化我的用户类型,这是多余的,而且容易出错 有没有办法在“nullSafeSet”中获取此信息 如果没有,是否有一种方法可以在用户类型初始化期间访问所属实体的定义(类似于参数的传递方式) 我做了类似的事情,需要在运行时基于其他一些设置设置自定义类型的属性。使用配置,您可以

我正在编写一个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)