Mar*_*tin 0 java multithreading hibernate jpa atomicinteger
我尝试 使用hibernate java 框架持久保存一个具有AtomicInteger变量而不是Integer 的对象(保存后我需要在线程安全场景中使用该对象),但是当我尝试保存我的对象时,java 抛出:
java.lang.ClassCastException: java.util.concurrent.atomic.AtomicInteger cannot be cast to java.lang.Integer
Run Code Online (Sandbox Code Playgroud)
有什么方法可以将 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;
}
}
Run Code Online (Sandbox Code Playgroud)
以及相应的 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>
Run Code Online (Sandbox Code Playgroud)
还有休眠版本:
<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>
Run Code Online (Sandbox Code Playgroud)
一种方法是编写一个 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);
}
}
Run Code Online (Sandbox Code Playgroud)
@Convert通常,您可以在类字段上使用 JPA注释@Entity,如下所示:
@Convert(converter = AtomicIntConverter.class)
private AtomicInteger totalErrors;
Run Code Online (Sandbox Code Playgroud)
您可以在此处的 Hibernate 5.2 文档中阅读有关它的更多信息。
但当您使用 hibernate 映射文件时,请确保将 Converter 类的 FQN 设置为字段的类型,而不是使用注释@Converter。
<property name="totalErrors" type="fully.qualified.name.of.AtomicIntConverter">
<column name="total_errors" />
</property>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2858 次 |
| 最近记录: |