gpt4 book ai didi

java - JPA:在@Query 中使用 AttributeConverter

转载 作者:行者123 更新时间:2023-11-30 08:39:40 26 4
gpt4 key购买 nike

我自己写了一个AttributeConverter来加密和解密基于thoughts-on-java的ByteArrays看起来类似于:

@Converter
public class CryptoByteArrayConverter implements AttributeConverter < Byte[], Byte[] > {

/**
* {@inheritDoc}
*/
@Override
public Byte[] convertToDatabaseColumn(Byte[] attribute) {
//...works fine
}

/**
* {@inheritDoc}
*/
@Override
public Byte[] convertToEntityAttribute(Byte[] dbData) {
//...works also fine
}
}

我的实体类正在使用这个转换器:

@Entity
public class ArchivedInvoice implements Serializable {
//...
@Convert(converter=CryptoByteArrayConverter.class)
@JsonIgnore
private Byte[] encryptedXml;
//...
}

到这里为止一切正常。我设置的数据在数据库中是加密的,拿到结果集后也是解密的。但是 CryptoByteArrayConverter 不会自动在 @Query 中使用。是否可以激活它或是否有其他好的解决方法?

例如:

@Query("SELECT ai FROM #{#entityName} ai WHERE (ai.encryptedXml = :xml)")
Page < ArchivedInvoice > findByXml(@Param("xml") byte[] xml, Pageable p);

最佳答案

我让它运行并意识到不需要检查解密值是否相等。 DB 属性的加密值与加密参数的比较返回正确的结果。将参数类型从 byte[] 更改为 Byte[] 后,AttributeConverter 已自动激活并对参数 (xml) 进行加密:

@Query("SELECT ai FROM #{#entityName} ai WHERE (ai.encryptedXml = :xml)")
Page < ArchivedInvoice > findByXml(@Param("xml") Byte[] xml, Pageable p);

下面的测试说明了我的意思:

@Test
public void saveTestEncryption() throws UnsupportedEncodingException {
repository.deleteAll();
ArchivedInvoice arcInv = createDTO(0);
repository.save(arcInv);
assertEquals(1, repository.count());
PageRequest pageRequest = new PageRequest(0, 25);
//Not encrypted!
String xml = arcInv.getXml();
Page < ArchivedInvoice > list =
repository.findByXml(ByteUtils.convert(xml.getBytes("UTF-8")), pageRequest);
assertEquals(1, list.getTotalElements());
xml += "A";
list = repository.findByXml(ByteUtils.convert(xml.getBytes("UTF-8")), pageRequest);
assertEquals(0, list.getTotalElements());
}

关于java - JPA:在@Query 中使用 AttributeConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36037458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com