java - 如何在数据库( hibernate )中计算表中的值?

标签 java mysql sql hibernate postgresql

我有两个表(A 和 B):一个表是某个对象的结构(A),另一个表通过多对多映射(B)连接两个表 A 和表 C。在表 A 中,我有必须使用表 B 计算的列。如何使该列在 hibernate 状态下自动计算?

主要问题:如何在 Hibernate 中将列作为查询?

更新:

我已经尝试了 @Formula 注释并得到了 org.hibernate.type.SerializationException: could not deserialize

你对这种情况有什么想法吗?

该字段的代码如下:

@Formula("(select count(t.first_id) from " + TABLE_NAME + " as t group by t.second_id)")
private int count;

setCount(...);
... getCount();

堆栈跟踪:

org.hibernate.type.SerializationException: could not deserialize
        at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:243)
        at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:287)
        at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:138)
        at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:113)
        at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:27)
        at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:53)
        at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:241)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:237)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:227)
        at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:303)
        at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2726)
        at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1728)
        at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1654)
        at org.hibernate.loader.Loader.getRow(Loader.java:1543)
        at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:727)
        at org.hibernate.loader.Loader.processResultSet(Loader.java:972)
        at org.hibernate.loader.Loader.doQuery(Loader.java:930)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336)
        at org.hibernate.loader.Loader.doList(Loader.java:2611)
        at org.hibernate.loader.Loader.doList(Loader.java:2594)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2423)
        at org.hibernate.loader.Loader.list(Loader.java:2418)
        at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:109)
        at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1716)
        at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:363)
        at org.hibernate.internal.CriteriaImpl.uniqueResult(CriteriaImpl.java:385)

最佳答案

您可以使用 @Formula注释并根据计算的 SQL 表达式定义实体字段。

@Formula(" select count(*) from C where C.dependent_id=id")
public int expressionCount;

其中 id 是映射实体的表的列

关于java - 如何在数据库( hibernate )中计算表中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35936494/

相关文章:

php - 包含地点,父地点,纬度,经度等的免费数据库

php pdo只返回一个结果集

c# - 如何在 C# 中将标量查询分配给报表查看器

java - "DisplayMetrics cannot be resolved to a type"Eclipse错误

java - 如何在控制台中每行打印特定数量的字符?

java - java中xml dom中的特殊字符解析错误

java - 将 MySQL 连接到 Java 客户端/服务器应用程序

c# - 在 C# 中处理多个数据库连接的最佳方法是什么

php - 需要获取表,以便每一行都有键的主 ID (ZEND)

java - Netbeans 项目的主类已被删除