I have a database which has some tables with encrypted columns. As of now, all these columns are of String type. I am using JPA's @Converter
to encrypt and decrypt a column in a table. However, I also know, that I can use Hibernate's @ColumnTransformer
to achieve the same objective of encryption and decryption while read and write operations. My question is how are they different and which is a better approach to use in terms of speed, maintainability, future enhancement, etc? Right now, @Converter
is working fine with String type of data. I am not sure it will work with Integer type or I will have to create a new Converter class.
They're very similar and in many cases can be used for exactly the same thing, but the implementations of the solutions varies a bit.
One primary difference is that one is Hibernate specific and the other is part of the JPA specification. If you want to write code matching the specification, use @Converter
and you'll be able to use other implementations besides Hibernate with your code.
Another major difference is that @ColumnTransformer
operates on the database level whereas @Converter
reads the value from the database as is, then converts it to something else on the application side. This may provide performance advantages for @ColumnTransformer
as the database performs some operations.
Additionally you can actually create an AttributeConverter
that applies automatically to all values of a given type. This can be advantageous for example in refactoring situations where you don't want to manually add a @Converter
annotation to many places.
So they can both be used to perform similar things and neither is implicitly better than the other.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With