java – jpa AttributeConverter是否适用于查询子句?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – jpa AttributeConverter是否适用于查询子句?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2392字,纯文字阅读大概需要4分钟。
内容图文
我有一个像这样的jpa实体:
@Entity
public class RectangleEntity
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column
private Integer x;
@Column
private Integer y;
@Column
@Convert(converter = ColorConverter.class)
private Color color;
}
我的ColorConverter是这样的:
@Converter
public class ColorConverter implements AttributeConverter<Color, String[]> {
@Override
public String[] convertToDatabaseColumn(Color color) {
switch(color) {
case REDISH : return {"red","pink"};
case GREENISH: return {"green","cyan"};
}
return sb.toString();
}
@Override
public Color convertToEntityAttribute(String... colorStrings) {
if(colorStrings == null || colorStrings.length != 1) {
return null;
}
if(colorStrings[0].equals("red") || colorStrings[0].equals("pink")) {
return REDISH;
} else if(colorStrings[0].equals("green") || colorStrings[0].equals("cyan")) {
return GREENISH;
}
}
}
问题是我想在这样的查询中使用我的列值:
Expression<String> colorPath = root.get("color");
Predicate predicate = requestStatePath.in(Color.REDISH);
Predicate[] predicatesArr = predicates.toArray(new Predicate[predicates.size()]);
criteriaQuery.where(predicatesArr);
CriteriaQuery<RectangleEntity> criteriaQuery = criteriaBuilder.createQuery(RectangleEntity.class);
TypedQuery<RectangleEntity> query = this.em.createQuery(criteriaQuery);
query.getResultList();
我想要这个查询选择我的所有记录,他们的颜色字段是粉红色或红色,因为它们是REDISH.
可能吗?
解决方法:
我不认为你的转换器正在做你想做的事情.首先,根据JPA,实现甚至不是有效的AttributeConverter. JPA仅定义对基本类型的AttributeConverters的支持,并不认为String []是基本类型.虽然Hibernate允许String [],但它只会将其视为Serializable.
你期望存储这些String []到DB ARRAY吗?如果是这样,Hibernate不支持DB ARRAY类型(但是,我们一直在谈论在6.0中添加对它们的支持).
但要回答你的确切问题……是的,JPA表示AttributeConverter应该在3.8节中概述的某些指导原则中自动应用于查询中:
… The persistence provider must apply any conversion methods to
instances of attribute values in path expressions used within Java Persistence query language queries or
criteria queries (such as in comparisons, bulk updates, etc.) before sending them to the database for the
query execution. When such converted attributes are used in comparison operations with literals or
parameters, the value of the literal or parameter to which they are compared must also be converted. …
但是你最终会得到一个类似< BINARY>的谓词.在< BINARY>中
内容总结
以上是互联网集市为您收集整理的java – jpa AttributeConverter是否适用于查询子句?全部内容,希望文章能够帮你解决java – jpa AttributeConverter是否适用于查询子句?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。