我正在使用Spring Boot开发一个相对较大的项目,总的来说我对此相当满意,但我有一些问题,在我看来应该不是问题。
>
首先是一对一的关系。令人沮丧的是,它没有像它应该的那样工作(至少在我的心目中是这样)。
我有两个实体,例如user
和userprofile
。他们有一对一的关系,但大多数时候我只需要用户
数据,但它获取(无论我尝试什么,和哦,男孩,我尝试了世界建议在每个帖子上为谷歌的5页)。
所以这是我的第一个问题,有没有一种方法能够在JPA和Spring中懒取一对一的关系?(因为大部分的帖子都是2-3年以上的)。
我遇到的另一个问题是以“动态”的方式构建JSON响应。我使用Rails做了一些工作,并且非常喜欢jbuilder
甚至to_json
,它使我能够根据控制器和当前的需要构建json响应。
在Spring我看到了以下解决方案:
jackson@jsonview
(这并不能完全解决我的问题,因为响应不是静态的,而且一个属性不能分配给多个视图(就我理解的概念而言));HashMap
(就像我在Rails上构建.json.jbuilder
一样)(但这会损害我的性能,因为有时它有关系,所以需要大量的
来构建json,而且这看起来是一个很难看的演练)。我想从某一天可能遇到过这样一个问题的人那里寻找一些方向,因为不能解决在我看来不应该这么难的问题让我很痛苦。
编辑%1
已尝试在@OneToOne
批注上添加optional=false
以解决@snovelli建议的OneToOne关系的急切加载问题。示例:
@OneToOne(optional=false, fetch = FetchType.LAZY)
public UserProfile getUserProfile(){ ... }
如果联接列不在一对一关联中的父级映射到的表中,则该关联不能是惰性的。原因是JPA提供程序无法确定是否创建代理,以便在以后访问时加载对象,或者保留null
值。
即使关联不是可选的,JPA提供程序也必须确定关联实体实例的id,以将其存储在代理中。因此,它无论如何都必须转到相关联的表。
解决方案:
>
null
,否则使用list.get(0)
。当然,您可以将其封装在entity类中(getter返回列表的唯一元素或null
)。缺点是必须在JPQL查询中将其视为集合。@PrimaryKeyJoinColumn
而不是外键。如果关联不是可选的(optional=false
),那么JPA提供程序知道有一个关联的子级具有相同的PK,因此它将只是将父级的PK作为子级的id存储在代理中。显然,您不能为这两个实体都使用两个独立的id生成器,否则PK可能会不同。如果符合您的要求,这是最好的方法。将父实体映射到数据库视图,该数据库视图将父表与子表联接,并包含所有父列和子表的id:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "<child id in the view>", insertable = false, updatable = false)
private Child child;
问题内容: 我正在使用Spring Boot开发一个相对较大的项目,总的来说,我对它很满意,但是我遇到了一些问题,这些问题在我看来应该不是问题。 首先,一对一关系。令人沮丧的是,它无法正常运行(至少在我看来)。 我有两个实体,并且,例如。他们之间存在一对一的关系,但是大多数时候我只需要数据,但是数据就可以获取(无论我尝试什么,天哪,我都尝试过在Google的5页每篇文章中的世界建议)。 因此,我的
我想以编程方式更改当用户滚动下面列表中的每个“查看更多”项目时选择的选项卡。我如何才能最好地完成这项工作?
问题内容: 有没有办法复制通用结构(即属性名称未知的结构)并跳过单个已知属性? 这是我所知道的: 我函数的参数-我将称为参数-类型。 是一个结构。 具有已知的性质。 具有0到6左右的其他属性,这些属性都不是先验的。 一旦删除该属性,那么“剩余”就是30种可能的结构类型之一。 所以我想剥离出来(或更精确地进行复制,它省略),所以生成的代码的各个位,尝试了结构迫使其可能的类型之一就能成功。 我已经找到
在中,我正在填充和。现在,我需要定义一个新的路由,它使用来自上传队列的消息,并复制一个本地文件夹(基于在上一个路由中生成的Id),并将其上传到目标文件夹,该文件夹是一个ftp服务器(这也在上一个路由中填充) 那么,如何设计一条新的路线,其中从和到终点都是动态的,如下所示?
问题内容: 我是Python的新手,并且正在使用JSON数据。我想通过向现有JSON对象添加一些键值来动态构建JSON对象。 我尝试了以下方法,但得到了: 问题答案: 您在将对象编码为JSON字符串 之前先 对其进行构建: JSON是 序列化 格式,文本数据 表示 结构。它本身不是那个结构。
我的应用程序在域级值对象之间使用了大量OneToMore和OneToOne引用,其中大多数是实体,要么是超类,要么是某物的子类。我想为我的应用程序提供一种一致(但简单)的方法来保存这些实例,实际的方法保存()就是这样 当前的问题是如何正确地实例化这些对象,以及在cassadeType中选择哪种策略,我想在保存带有其他实体引用的对象时保存嵌套对象,它现在可以工作,但只是第一次,之后我得到了一个,因为