作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 hibernate java 框架持久保存一个具有 AtomicInteger 变量而不是 Integer 的对象(我需要使用该对象在保存它之后的线程安全场景中)但是当我尝试保存我的对象时java抛出:
java.lang.ClassCastException: java.util.concurrent.atomic.AtomicInteger cannot be cast to java.lang.Integer
有没有办法将 AtomicInteger 映射到整数?有一个对象示例:
public class Statistics implements java.io.Serializable {
private AtomicInteger id;
private AtomicInteger totalErrors;
public Statistics() {
}
public AtomicInteger getTotalErrors() {
return this.totalErrors;
}
public void seTotalErrors(AtomicInteger totalErrors) {
this.totalErrors= totalErrors;
}
}
以及相应的 POJO xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Statistics" table="statistics" catalog="example" optimistic-lock="version">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="totalErrors" type="java.lang.Integer">
<column name="total_errors" />
</property>
</class>
</hibernate-mapping>
还有 hibernate 版本:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-hikaricp</artifactId>
<version>5.2.10.Final</version>
</dependency>
最佳答案
一种方法是编写 JPA 2.1 AttributeConverter从 Integer 转换为 AtomicInteger,如下所示
@Converter
public class AtomicIntConverter implements AttributeConverter<AtomicInteger, Integer> {
@Override
public Integer convertToDatabaseColumn(AtomicInteger attribute) {
return attribute.get();
}
@Override
public AtomicInteger convertToEntityAttribute(Integer dbData) {
return new AtomicInteger(dbData);
}
}
通常,您可以在 @Entity
类字段上使用 JPA @Convert
注释,如下所示:
@Convert(converter = AtomicIntConverter.class)
private AtomicInteger totalErrors;
您可以在Hibernate 5.2 documentation here.中阅读更多相关信息。
但是当您使用 hibernate 映射文件时,请确保将 Converter 类的 FQN 设置为字段的类型,而不是使用 @Converter
注释。
<property name="totalErrors" type="fully.qualified.name.of.AtomicIntConverter">
<column name="total_errors" />
</property>
关于java - 如何在 hibernate 中保留 AtomicInteger 而不是 Integer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46173921/
我是一名优秀的程序员,十分优秀!