我需要调用自定义注释实现,但是我的实现没有被调用。 在自定义注释实现Hibernate没有被调用
下面的代码段,我有一个配置文件对象有两个字段(id,内容)。内容字段接受 一个字符串和
需要在运行时通过自定义注释更改内容。
我的域对象
@Entity
@Table(name = "profile", catalog = "db")
public class Profile implements java.io.Serializable{
private Integer profileId;
@ProcessContent(convertor = ProcessContent.class)
private String content;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "PROFILE_ID", unique = true, nullable = false)
public Integer getProfileId() {
return profileId;
}
public void setProfileId(Integer profileId) {
this.profileId = profileId;
}
@Column(name = "CONTENT", unique = true, nullable = false, length = 255)
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
我的自定义注解
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Target({ ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ProcessContent {
@SuppressWarnings("rawtypes")
Class<? extends Object> convertor() default DefaultFieldValueConvertor.class;
}
样品标注的实现。 (请注意,这是一个简单而复杂的逻辑来这里)
public class DefaultFieldValueConvertor {
public Object convert(Object value) {
return (value + "Processed");
}
}
仪
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Profile profile = new Profile();
profile.setContent("OOOOOOOOOPSSSSSSSSS");
session.save(profile);
session.getTransaction().commit();
session.close();
}
问题 - >我可以看到经过串DB得到保存,而不是一个通过我的注释执行处理。
你为什么期望标注被调用?您发布的代码中没有任何内容可以触发它。 – kostja 2014-08-27 10:39:59
我的实际情况有点复杂。我需要保持我的问题简单。我需要一个对所有域对象通用的注释,并在保存之前触发它。但是我需要在进行其他工作之前的原始值,这是我在hibernate拦截器级别所做的工作。我的问题是为什么在DefaultFieldValueConvertor中定义的实现没有被调用? – vin 2014-08-27 10:45:20
我的意思是 - 什么机制应该触发注释处理?你为什么期望JPA保存,而不是更新或加载? JPA不处理随机注释 - 它有一套它寻找和留下所有其他人。 – kostja 2014-08-27 10:49:00