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

Spring BootJpa实体,映射与id和实体相同的引用列

梁浩
2023-03-14
@Entity
@Table(name = "user")
public class User {
    @Id
    private UUID id;

    @Column(name = "name")
    private String name;

    ...

    // getter setter ignored for brevity
}


@Entity
@Table(name = "student")
public class Student {
    @Id
    private UUID id;

    @Column(name = "user_id")
    private UUID userId;

    @OneToOne
    @JoinColumn(name = "user_id", referencedColumnName = "id", 
                insertable = false, updatable = false)
    private UserEntity userEntity;

    ...

    // getter setter ignored for brevity
}


@Repository
public interface StudentRepository extend PagingAndSortingRepository<StudentEntity, UUID> {

  Optional<StudentEntity> findByUserId(UUID userId);
}
StudentEntity student = studentRepository.findByUserId(userId).get()
student.getUserId() --- this is present
student.getUserEntity() -- NULL

不确定为什么UserEntity没有被填充为此调用的一部分。

共有1个答案

江雅懿
2023-03-14

问题很可能是持久化上下文仍然包含以前保存的实体(没有用户集)。您首先必须清除持久性上下文并再次加载它才能看到一个非空用户。

无论如何,就像评论中建议的那样,我会建议您只映射用户。您不需要userid字段。按照您现在映射的方式,您应该可以使用以下内容:

Optional<StudentEntity> findByUserEntityId(UUID userId);

关于这个问题的更多信息,请阅读官方文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-property-expressions

 类似资料:
  • 问题内容: 我是Go语言的新手,具有C#背景并且对如何构造Go应用程序感到困惑。 假设我正在构建一个REST API,它将位于数据库之上。还要说,即使完成后,鉴于业务的变迁等,此应用程序可能仍需要频繁更改。 在带有诸如Entity Framework和DTO之类的工具的C#中,我通过从控制器给出的结果中抽象出数据库来缓解此问题。如果更改数据库中一堆字段的名称,则可能必须更改数据库访问逻辑,但是希望

  • 快速总结我想要实现的目标。请给出实施或设计建议:) 我有两个表:用户,图像。在UserDO中,我希望保留一组所有用户的图像,以及单个图像,即用户的肖像(在我的示例中,该组将包括肖像): 在ImageDO中,我有一个userid作为外键来记录哪个用户上传了图像。但是它没有布尔值,因为认为一个用户可能会上传许多图像,但只有一个是肖像。 有什么方法可以实现这一点吗?或者我需要维护另一个表(例如,Port

  • 我有以下模式: 项目(ID,名称)项目用户(项目ID,用户ID)用户(名称,ID) 实体如下 显然是一对多。项目可以有多个用户。 现在,我的目标是编写jooq查询,在那里我可以获取已经有相应用户的项目对象。 但是当预期约15时,查询将恢复千分之一的结果

  • null 这些类有各自的映射,在数据库模型中,这些表没有关联,在hibernate映射中也没有关联,但是在保存合同时,它必须在字段(业务规则)中具有相同的,但在某些情况下,也给出了没有验证的合同。 我的问题是当我运行HQL查询时: 但Hibernate使用交叉连接语句翻译并合并所有记录。是否有方法在文件中的非相关类之间执行HQL查询? 规则:不应是映射的实体。

  • 我只是在学习java ee 6。我的目标是有一个简单的crud应用程序,让我创建编辑列表和删除一个简单的实体,由id,一个名称字符串和一个描述字符串。我使用了eclipse而不是netbeans,使用了JBoss7而不是glass Fish,只是为了查看一些代码http://netbeans.org/kb/docs/web/jsf20-crud.html。嗯....它起作用了。 现在认为我的实体是

  • 我希望在我正在从事的一个项目中使用CQR,但是我目前正在努力寻找实现CQR查询端的最佳方法。基于我有限的理解,有一个瘦数据层(有时称为瘦读取层),用于查询数据库并返回DTO,其中包含应用程序UI层使用的查询结果。 由于这是一个Java的EE应用程序,我正在开发薄数据层,使用JPA使用EntityManager.createNamedQuery查询数据库,返回一个包含结果的实体,然后将其映射到DTO