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

创建新实体加关联不起作用

薛兴言
2023-03-14
POST http://localhost:8080/groups

{
  "name": "Group 1", 
  "users": ["http://localhost:8080/users/1"]
}
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface AppUserRepository extends JpaRepository<AppUser, Long> {
    AppUser findByUsername(@Param("username") String username);
}

@RepositoryRestResource(collectionResourceRel = "groups", path = "groups")
public interface UserGroupRepository extends JpaRepository<UserGroup, Long> {
    List<UserGroup> findByName(@Param("name") String name);
}
@Column(name="user_group_id")
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "app_user__user_group",
        joinColumns = {
                @JoinColumn(name = "app_user_id", nullable = false, updatable = false) },
        inverseJoinColumns = {
                @JoinColumn(name = "user_group_id", nullable = false, updatable = false)})
private Set<UserGroup> groups;
@Column(name = "app_user_id")
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "groups")
private Set<AppUser> users;

如果我只传递一个字符串,而不是用户的列表:

POST http://localhost:8080/groups

{
  "name": "Group 1", 
  "users": "http://localhost:8080/users/1"
}

我得到的是:

{
  "cause": {
    "cause": null,
    "message": "Cannot deserialize instance of java.util.Set out of VALUE_STRING token at [Source: (org.apache.catalina.connector.CoyoteInputStream); line: 7, column: 12] (through reference chain: mahlzeit.api.hibernate.model.UserGroup["users"])"
  },
  "message": "JSON parse error: Cannot deserialize instance of java.util.Set out of VALUE_STRING token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.Set out of VALUE_STRING token at [Source: (org.apache.catalina.connector.CoyoteInputStream); line: 7, column: 12] (through reference chain: mahlzeit.api.hibernate.model.UserGroup["users"])"
}

共有1个答案

潘弘扬
2023-03-14

试试看

@Column(name = "app_user_id")
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "groups",cascade = CascadeType.ALL)
private Set<AppUser> users;

最后传递用户列表

{
  "name": "Group 1", 
  "users": ["http://localhost:8080/users/1"]
}

对于无法反序列化java.util.Set的实例错误,应该是用户列表,而不是单个用户的实例

 类似资料:
  • 我正在尝试使用一个不是很简单的关联表在两个JPA实体之间进行ManyTo许多连接。我想知道是否有一种方法可以在不创建关联表实体的情况下实现这一点(类似于使用@JoinTable)。 表A-ID(PK) -名称 表b -ID(PK) -名称 TableMapping-ID(PK) -Parent\u ID(FK)-- 映射以我上面描述的方式存储,原因我不知道,也无法更改。很多地方都在这样使用它,我必

  • 假设我在前面有一个表单,它有常用的字段和下拉列表。在这些下拉列表中,用户可以选择一个选项,并且每个选项都链接到Spring data JPA中的一个实体; 下拉列表包含一些标签和对应实体的链接作为值。然后,这个值在POST-request中传递给我们希望创建的实体的PagingAndSorting存储库。 假设它是一个具有username的用户,并且他必须与其中一个办公室(也是一个实体)关联: 我

  • 我有一个表,其中包含。 我还有一个硬编码表,其中我已经为每个国家/地区创建了一个区域,国家/地区是主键。 我想加入

  • 问题内容: 为什么在我的某些模型中序列化不会为 Foreignkey 创建新列?但是它确实为其他模型创建了??? 令人沮丧和奇怪。例如,在此用户模型中,不会创建sequelize 。 这是一个类似的问题:不会创建模型关联列但不能创建!没有回答。 我已经花了几个小时,我做了所有类似的事情: 仔细阅读以下内容:https : //sequelize.org/master/manual/assocs.h

  • 由于某些原因,我的位图创建不起作用。我找到一只虫子了吗?当我尝试使用矩阵创建一个新位图时,它说我的宽度和高度必须大于0,这毫无意义。 我知道这看起来好像我没有做过任何研究,我做过,但这没有意义。我已经尝试了很多事情,包括将新宽度和新宽度更改为常量,但它仍然不起作用。如果有帮助的话,这是堆栈跟踪 我正在尝试制作一个旋转门户。我想有一个矩阵平移,旋转和缩放,但我没有得到工作。我决定把译文拿出来,只是做

  • 我试图理解为什么persist()的行为在许多情况下是不同的,首先是持久化一个新实体,其次是修改该实体。我的测试设置有一名员工,他与部门有一个单向的多人对话;部门与员工之间没有关系。对于测试,我在Employee中的Department字段上没有任何级联注释。 我发现,在创建员工时,我必须调用em.persist(dept),否则dept实例不会持久化,我会得到一个异常。因此,我调用em.pers