当前位置: 首页 > 知识库问答 >
问题:

Spring数据。使用本机插入查询保存BigDecimal属性

洪高扬
2023-03-14

我有一个实体:

@Data
public class MoneyEntity {

   @Id
   @GeneratedValue
   @Column(name = "id", updatable = false, nullable = false)
   private UUID id;

   @Column(name = "money")
   private BigDecimal money;

   @Column(name = "date")
   private Instant date;
}

目标是通过本机查询将其保存到PostgreSQL数据库:

@Modifying
@Query(value = "INSERT INTO performance_info (id, money, date) VALUES "
        + "(:#{#entity.id}, "
        + ":#{#entity.nav}, "
        + ":#{#entity.date} )"
        + " ON CONFLICT (date) DO NOTHING", nativeQuery = true)
void saveWithout(MoneyEntity entity);

问题在于,大十进制值的转换方式类似于bytea,而不是numeric。以下是错误消息

原因:org。postgresql。util。PSQLException:错误:“money”列的类型为numeric,但表达式的类型为bytea提示:您需要重写或强制转换表达式

我已经尝试使用key和class@Type(Type=“org.hibernate.Type.BigDecimalType”)添加注释。没有效果。

尝试实现自定义转换器:

@Converter
public class DecimalConverter implements AttributeConverter<BigDecimal, Double> {
    @Override
    public Double convertToDatabaseColumn(final BigDecimal attribute) {
        return attribute.doubleValue();
    }

    @Override
    public BigDecimal convertToEntityAttribute(final Double dbData) {
        return BigDecimal.valueOf(dbData);
    }
}

问题是,只有BigDecimal可以转换为数字Postgres类型。

有没有办法保存BigDecimal属性与使用Spring Data的本机查询?


共有1个答案

尉迟远
2023-03-14

可以使用数字或十进制,并指定所需的精度。在这里看一下Postgresql文档。

例如:

t.decimal "money", precision: 12, scale: 4, default: "0.0"
 类似资料:
  • 问题内容: 我尝试将以下代码添加到spring数据jpa存储库中: 但是应用程序不能以以下例外开头: 由以下原因引起:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:第1行第59列附近的值[插入commit_activity_link(commit_id,activity_id)VALUES(?1,?2)] 我哪里错了? 问题答案:

  • 我使用的是vertx jdbc客户端(http://vertx.io/docs/vertx-jdbc-client/java/)我的数据库连接。这适用于除BigDecimal之外的所有数据类型。 在我的数据库中,类型是decimal(13,2),在Java中,我使用的是BigDecimal数据类型。我只是想读书 不幸的是,我得到了以下例外: 查看io.vertx.core.json.Json.ch

  • SqliteOpenHelper只是一个工具,是SQL世界和OOP之间的一个通道。我们要新建几个类来请求已经保存在数据库中的数据,和保存新的数据。被定义的类会使用ForecastDbHelper和DataMapper来转换数据库中的数据到domain models。我仍旧使用默认值的方式来实现简单的依赖注入: class ForecastDb( val forecastDbHelper:

  • 我使用注释和注释执行查询,并从数据库表中删除记录。 错误: xxx的例外。xxx。xx,原因='javax。坚持不懈TransactionRequiredException:执行更新/删除查询“和异常=”执行更新/删除查询;嵌套的异常是javax。坚持不懈TransactionRequiredException:执行更新/删除查询'

  • 我有这样的查询(select id,reffid,someData from myTable): 我需要查询来执行以下操作:如果我有少于 4 个具有相同值的 reffid,则添加具有相同 reffid 的行并在 someData 中添加 -。结果查询应如下所示: 如何做到这一点?

  • 我使用Spring引导和Spring数据JPA。它工作得很好但是!我需要使用复杂的本地查询从Oracle数据库(源数据从SAP ERP)。 假设查询包含5个joned表(一个键或组合键)。我可以使用很多参数。 解决方案: 1)由于耗时,使用JPA为该查询编写新查询是不真实的。创建表之间的所有键关系似乎很复杂。 2)为了运行这些查询,我使用JDBC。这很容易,因为我准备了本机查询。但我深信这种做法是