Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA与存储在不同数据库中的用户实体的多对多关系 太长,读不下去了_Java_Spring Boot_Jpa_Join_Many To Many - Fatal编程技术网

Java JPA与存储在不同数据库中的用户实体的多对多关系 太长,读不下去了

Java JPA与存储在不同数据库中的用户实体的多对多关系 太长,读不下去了,java,spring-boot,jpa,join,many-to-many,Java,Spring Boot,Jpa,Join,Many To Many,我试图创建一个与存储在不同数据库中的实体(用户)的关系,但我不知道如何在JPA中实现这一点 用例 我正在Spring Boot/JPA中实现一个汽车服务。我已经创建了一个名为Car的实体/表。一辆车可能有多个车主(用户),一个用户可能拥有多辆车。但是,User表存储在单独的用户服务中 因为这是一个多人关系,我觉得一个JoinTable是合适的。这里的问题是没有要加入的用户表。我只需要将用户的uuid存储在join表中,这样GET方法就可以获取给定用户的所有汽车,或者给定汽车的所有车主 源代码

我试图创建一个与存储在不同数据库中的实体(用户)的关系,但我不知道如何在JPA中实现这一点

用例 我正在Spring Boot/JPA中实现一个汽车服务。我已经创建了一个名为
Car
的实体/表。一辆车可能有多个车主(用户),一个用户可能拥有多辆车。但是,
User
表存储在单独的用户服务中

因为这是一个多人关系,我觉得一个
JoinTable
是合适的。这里的问题是没有要加入的
用户
表。我只需要将用户的uuid存储在join表中,这样
GET
方法就可以获取给定用户的所有汽车,或者给定汽车的所有车主

源代码 下面是对
Car
实体的一次尝试。删除
ForeignKey
约束允许在联接表中创建条目,而不会由于缺少子表而导致错误

@数据
@实体
@表(name=“car”)
@EqualsAndHashCode(callSuper=true)
公车{
@Id@GeneratedValue私有UUID Id;
@许多
@可接合(
name=“车主”,
joinColumns=@JoinColumn(name=“car\u id”),
inverseJoinColumns=@JoinColumn(name=“user\u id”,insertable=false,updateable=false),
foreignKey=@foreignKey(name=“user\u id”,value=ConstraintMode.NO\u CONSTRAINT))
私人用户;
私有字符串模型;
私人双价;
}
以下是JPA
JoinTable
所需的
用户
实体,但仅用于其ID:

@数据
@实体
@EqualsAndHashCode()
公共类用户{
@Id私有UUID Id;
@多人(mappedBy=“用户”)
@杰索尼奥雷
私家车;
}
将以下模型发送到JPA存储库
save()
方法将成功创建连接表中的car和条目:

{
“车型”:“福特T型车”,
“价格”:850.00,
“用户”:[
{“id”:“e048b593-aad9-4285-b3e6-49475ad9bd1d”},
{“id”:“1d0f7b1e-bc36-4b99-80a1-8835779598ca”}
]
}
问题陈述 但是,当我尝试检索属于特定用户ID的所有车辆时:

@Query(
value=“在c.id=co.car\u id上选择*从车c内部加入车主co,其中co.user\u id=:userId”,
nativeQuery=true)
列出findByUserId(UUID userId);
我得到以下错误:

错误:列user1\uID不存在 已解析的[org.springframework.http.converter.httpmessagenetwitableexception:无法写入JSON:无法提取结果集;嵌套的异常为com.fasterxml.jackson.databind.JsonMappingException:无法提取结果集(通过引用链:java.util.ArrayList[0]->Car[“users”])]


如何读取给定用户的车辆列表?我走错方向了吗?我对其他实现持开放态度。

正如@vincendep提到的,解决方案是删除
User
实体,并用以下内容替换
Car
实体中的
users
属性:

@ElementCollection
@CollectionTable(name=“car\u owner”,joinColumns=@JoinColumn(name=“car\u id”))
@列(name=“user\u id”)
私人业主;
这仍将使用
car\u owner
join表。可以使用以下型号的多个用户创建汽车:

{
“车型”:“福特T型车”,
“价格”:850.00,
“业主”:[
“32a7967d-8580-418d-b53a-221ed0c52222”,
“a708455c-c37c-4712-a7ce-59c9be5a5eb5”
]
}
您可以按以下用户ID查询汽车(计入@vincendep):

@Query(value=“来自c车,其中:c.owners的ownerId成员”)
列出findByUserId(UUID所有者ID);

它是存储在同一数据库但不同的架构中,还是存储在不同的数据库服务器中?如果它的数据库相同但架构不同,则可以在当前架构中创建一个视图并查询多个架构。但如果它是一个不同的数据库,即使我不是sure@SridharPatnaik用户数据库尚未创建,但我希望使用microservice体系结构,这将要求这两个服务解耦(不同的数据库)。如果用户由另一个服务管理,您的汽车服务中不应该有用户实体。所以只需使用@ElementCollection private Set即可owners@vincendep没错,我需要删除
User
实体和
JoinTable
。但是我仍然不清楚如何将
车主
表和列映射到
@ElementCollection
。我们将继续朝这个方向搜索。谢谢此外,查询应该类似于@query(value=“FROM Car c WHERE:owner MEMBER OF c.owner”)列表findByUserId(UUID owner);万分感谢你的帮助@vincendep!这个解决方案要干净得多。我一定会把它添加到我的JPA工具箱中。