gpt4 book ai didi

java - 如何在 hibernate 中保留 AtomicInteger 而不是 Integer?

转载 作者:行者123 更新时间:2023-12-01 20:14:27 25 4
gpt4 key购买 nike

我尝试使用 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/

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