2016-08-12 6 views
4

Я переключаю структуру ORM из Hibernate в OpenJPA.Открытый эквивалент JPA для Hibernate @ColumnTransformer

В Hibernate мы могли бы аннотировать поле с помощью @ColumnTransformer, как показано ниже.

@Column(name = "EMP_NAME", length = 4000) 
@ColumnTransformer(
     read = "pgp_pub_decrypt(emp_name::bytea,dearmor('"+key1+"'))", 
     write = "pgp_pub_encrypt(?, dearmor('"+key2+"'))" 
) 
private String empName; 

Как сделать то же самое в OpenJPA

+0

Если указывать полный запрос вместо преобразования только одного столбца, то допустимы некоторые возможности [здесь] (http://stackoverflow.com/a/21487061/2646526). – heenenee

+0

Преобразование одного столбца - это то, что я ищу. Также необходимо вызвать функцию при сохранении данных. Эта ссылка показывает пример только для чтения. – auhuman

ответ

2

Я не уверен в OpenJPA конкретных возможностей, связанных с этим, но следующие две альтернативы будет работать для всех провайдеров JPA:

  1. Создать updatable view, который выполняет необходимые преобразования и отображает объект в представлении вместо таблицы.
  2. Переместите преобразования в промежуточное программное обеспечение и примените их в entity lifecycle callbacks.

Другим преимуществом обоих решений является то, что вы храните сущности в чистоте пользовательского собственного SQL.

+0

Спасибо. У меня есть сомнения в этом подходе. В моем требовании я должен передать ключ для метода шифрования из приложения. Можно ли передавать открытый ключ и закрытый ключ в представление динамически из объекта на INSERT & SELECT? – auhuman

+0

Я также попытался переместить преобразование в обратные вызовы жизненного цикла объекта - PrePersist. Он упорствует функцию Postgres как строку вместо того, чтобы вызвать функцию '@PrePersist \t @PreUpdate \t общественного недействительными prePersist() { \t \t this.empName =«pgp_pub_encrypt (' "+ this.empName +"', dearmor (» "+ key1 +" ')) "; \t} ' – auhuman

+0

Я пробовал вариант 1. Столкнувшись с проблемами. Преодоление одного за другим. – auhuman

Смежные вопросы