【发布时间】:2016-08-22 13:35:20
【问题描述】:
我正在使用带有 JPA/Hibernate 5.2.1 和 MySQL 数据库的 Java 8。
表格:
+--------+ +----------------+ +----------+
| Rating | | Rating_Employee| | Employee |
+--------+ +----------------+ +----------+
| ID | | RAT_ID | | ID |
| REVIEW | | EMP_ID | +----------+
+--------+ +----------------+
我正在尝试在 Rating 表中保存一行,但得到以下信息:
MySQLSyntaxErrorException: Unknown column 'employee0_.distance' in 'field list'
原因是因为 Employee 模型对象有一个DISTANCE 字段,但在数据库中没有匹配的列。我需要 DISTANCE 字段,因为当我在 Employee 表上执行 SELECT 时,我会根据带有 nativeQuery 的其他列计算 DISTANCE。但是,当 Hibernate 在更新连接表 RATING 时自行选择时,它想要匹配不存在的 DISTANCE(我收到上述错误)。
当我persist 或merge Employee 对象时,我使用以下成功:
@Column(insertable=false, updatable=false)
private BigDecimal distance;
问题:
在执行非本机查询 select 时,如何让 Hibernate 忽略 DISTANCE? (当它更新RATING 表时)
更新
有人建议我可能使用@Formula("..."),但我的方法有一个相当复杂的nativeQuery,它也是由distance 排序的。如果我把公式放入@Formula("..."),它还需要接收当前传递给方法的参数。
有什么想法吗?
【问题讨论】:
-
您可以使用 Hibernate @Formula 列通过原生 SQL 查询检索距离:stackoverflow.com/questions/2986318/…
-
谢谢艾伦,我去看看。
-
嗨艾伦,我使用
@Formula的问题是我需要按distance排序结果集。我无法检索它,并在 java 中对其进行排序,因为我一次只能获得有限数量的行。你有什么想法?是否可以order by@Formula列? -
是否可以在运行时通过反射动态切换字段
@Transient?他的任何人都有Javassist 的经验吗? -
Javassist 对我不起作用,因为在运行时,我必须创建一个新的类加载器来获得它的效果。
标签: java mysql sql hibernate jpa