我需要調用自定義註釋實現,但是我的實現沒有被調用。 在自定義註釋實現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