java - Springboot JPA 将列连接为实体
问题描述
我有两个域:
游戏模式和游戏。
游戏模式的一列是game_id,即Game的外键。
@Entity
@Table(name = "game")
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class Game extends BaseTable implements Serializable {
// PROPERTIES
@Id
@GeneratedValue()
@Column(name = "id")
private UUID id;
...
我想在GameMode中获取实体Game,如下:
@Entity
@Table(name = "game_mode")
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class GameMode extends BaseTable implements Serializable {
// PROPERTIES
@Id
@GeneratedValue()
@Column(name = "id")
private UUID id;
@JoinColumn(name="id")
@Column(name = "game_id")
private Game game;
...
但是当我尝试执行此调用时:
GameMode gameMode = gameModeRepository.findByGameAndDescription(game, reqBody.getDescription());
(其中游戏是游戏类型)
我收到此错误:
org.springframework.dao.InvalidDataAccessResourceUsageException:无法提取结果集;SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException: could not extract ResultSet\r\n\tat org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:280)\r\n\tat org.springframework .orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:254)\r\n\tat org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:528)\r\n\tat org.springframework .dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)\r\n\tat org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java: 186)\r\n\tat org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:353)\r\n\tat org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99) \r\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n\tat org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)\r \n\t... 95 个以上\r\n原因:org.postgresql.util.PSQLException:错误:运算符不存在:uuid = bytea\n 提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。\n 位置:313\r\n\tat org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:
你知道怎么解决吗?谢谢。
解决方案
我认为您错过@ManyToOne
了与游戏相关的上述内容。因此,将 GameMode 更改为:
@ManyToOne
@JoinColumn(name="id")
@Column(name = "game_id")
private Game game;
推荐阅读
- javascript - 模板 getter 必须在 polmer 中返回 HTMLTemplateElement
零件 - python - 更新 AWS Elastic Beanstalk 解决方案堆栈名称
- ionic-framework - 在弹出框内导航
- css - 对话框内的Angular 6 Primeng确认对话框停用页面
- java - Java ArrayList 在第 n 个位置添加元素
- sql - 具有不同日期范围的行到列
- jupyter-notebook - jupyter 不会在默认目录之外运行代码
- ag-grid - 如何在服务器端/无限行模型中使用快速过滤器?
- python - 如何以 20 秒的间隔迭代音频文件?
- javascript - 检测 html 页面何时在对象标签中完成加载