Мне нужно вызвать пользовательскую реализацию аннотации, но моя реализация не вызвана. ВПользовательская реализация аннотации Hibernate не получает вызов
ниже фрагмента кода, у меня есть профиль Object с двумя полями (id, content). Поле содержимого принимает a строка и
необходимо изменить содержимое во время выполнения через пользовательскую аннотацию.
Мой объект домен
@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");
}
}
Tester
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Profile profile = new Profile();
profile.setContent("OOOOOOOOOPSSSSSSSSS");
session.save(profile);
session.getTransaction().commit();
session.close();
}
Вопрос -> Я могу видеть прохождение строка становится сохранить в БД, а не тот, обрабатываемые с помощью моей реализации аннотаций ,
Почему вы ожидаете, что аннотация будет называться? В коде, который вы опубликовали, нет ничего, чтобы вызвать его. – kostja
Мой фактический сценарий немного сложный. Мне нужно, чтобы мой вопрос был прост. Мне нужно иметь аннотацию, которая является общей для всех объектов домена и запускать ее непосредственно перед сохранением. Но мне нужно исходное значение перед процессом для другой работы, которую я делаю на уровне перехватчика спящего режима. Мой вопрос: почему реализация, определенная в DefaultFieldValueConvertor, не вызвана? – vin
Что я имею в виду - какой механизм должен запускать обработку аннотаций? Почему вы ожидаете, что JPA сделает это при сохранении, а не, скажем, обновлении или загрузке? JPA не обрабатывает случайные аннотации - у него есть набор, который он ищет, и оставляет всех остальных. – kostja