在Java应用程序和MySql之间进行通信时,我需要在Map和JSON字符串之间进行转换。我遇到了两个非常有前途的解决方案:AttributeConverter和UserType。
选择一种解决方案与另一种解决方案之间是否存在任何利弊?在所有事情都被认为是平等的情况下,AttributeConverter肯定看起来更简单。
答案 0 :(得分:9)
AttributeConverter
需要JPA 2.1(Hibernate 4.3+),但如果它可用,它是一个更清洁的选择。自定义UserType可能会破坏未来版本的Hibernate,而AttributeConverter可能不会。
请确保在要转换的特定字段上指定@Convert
注释,而不是设置autoApply
,因为您不想转换所有地图或所有字符串。
还要确保使用库进行Map-String转换,而不是手动编码。
答案 1 :(得分:0)
就比较这些方法而言,在大多数情况下,AttributeConverter
是通俗易懂的解决方案。
除了JPA版本之间的差异外,还有一个较大的缺点/差异值得关注: @Convert
和@Id
属性不能一起使用(您会得到反序列化错误)。如果需要此类功能,则必须诉诸UserType
。