首页 > 解决方案 > 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:

你知道怎么解决吗?谢谢。

标签: javahibernatejpa

解决方案


我认为您错过@ManyToOne了与游戏相关的上述内容。因此,将 GameMode 更改为:

   @ManyToOne
   @JoinColumn(name="id")
   @Column(name = "game_id")
   private Game game;

推荐阅读