我正在使用Hibernate 3.6的环境。我正在尝试实现一个使用java.util中的UUID作为PK的MySQL表,这些UUID是从EntityImage定义的多个字符串生成的。这是我用来生成这些密钥的代码。
public class EntityIDGenerator implements IdentifierGenerator {
...
private UUID generateUUID(String str) {
return UUID.nameUUIDFromBytes(str.getBytes());
}
public UUID generateUUID(EntityImage image) {
return generateUUID(image.getEntityId()+image.getEntityType().toUpperCase()+image.getFilename().toUpperCase());
}
...
public Serializable generate(SessionImplementor session, Object object)
throws HibernateException {
if(object instanceof EntityImage) {
return generateUUID((EntityImage)object);
}
return null;
}
}
这里是我的休眠
<class name="EntityImage" table="entity_image">
<id name="id" column="id" type="entityUUID" unsaved-value="null">
<generator class="com.covelo.energy.score.db.EntityIDGenerator" />
</id>
<property name="entityId" type="int"/>
<property name="entityType" type="string" length="45" />
<property name="filename" type="string" length="90" />
<property name="fileType" type="string" length="5"/>
<property name="imageData" type="binary" column="image_data"/>
</class>
使用我当前的设置,我只能以一种方式工作,自己生成UUID并检查Hibernate中是否存在密钥然后相应地调用保存或更新(或者只是将UUID分别设置为null或值)
这种方式似乎是错误的,特别是对于实现这个PK生成器。理想情况下,Hibernate会使用我的IdentifierGenerator生成PK,然后检查它是否存在并更新或保存它。我是否认为我的架构错了,或者有什么方法可以在hibernate中执行此操作?
注意:我很清楚saveOrUpdate如何运作Hibernate documentation
- 提前谢谢。 奈德