如何为 manytomany 映射的第三个 table 编写自定义查询

How to write customized query for third table of manytomany mapping

我创建了朋友 table,它有自己加入的 ManyToMany 关系。朋友实体有朋友列表,结果是第三个 table 表示 ManyToMany 关系。

public class Friends {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    private String name;
    @ManyToMany
    @JoinTable(
              name = "friends_list", 
              joinColumns = @JoinColumn(name = "friends_from"), 
              inverseJoinColumns = @JoinColumn(name = "friends_to"))
    private List<Friends> friends;
    
    
}

我想在已加入的 table 上创建查询。我创建了类似

的查询
@Query(value="Select * from friends_list f where f.friends_from=:id", nativeQuery=true)
    public List<Friends> findFriendsById(@Param("id") Long id);

现在,当我提出创建资源的请求时,它会抛出以下错误。

@RestController
public class FriendsController {
    @Autowired
    private FriendsService friendsService;
    
    @PostMapping("/friends")
    public Friends createFriends(@RequestBody Friends frnd)
    {
        return friendsService.createFriends(frnd);
    }
    
    @GetMapping("/friends/{id}/distance/{k}")
    public List<Friends> getFriendsAtDistanceK(@PathVariable("id") Long id,@PathVariable("k") int k)
    {
        return friendsService.getFriendsAtDistanceK(id, k);
    }
}

请求

{
    "id":1,
    "name":"sujeet",
    "friends":[
        {
            "friends_from":1,
            "friends_to":2
        }
    ]
}

我已经创建了两个没有好友列表的好友。我正在尝试添加朋友列表中的朋友。但它显示以下错误。

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.learn.friends.entity.Friends
    at org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:347) ~[hibernate-core-5.6.5.Final.jar:5.6.5.Final]

您是否尝试过为此使用 @Cascade({ CascadeType.SAVE_UPDATE, CascadeType.MERGE, CascadeType.PERSIST}) 注释?此解决方案的来源是 here