当前位置: 首页 > 面试题库 >

使用Spring Data REST发布具有关系的实体

蓬威
2023-03-14
问题内容

我正在使用Spring Data Rest。我在尝试发布具有关联的对象时遇到问题(例如,address是我实体中的一个字段,该字段被映射为多个)。

问题是,我们应使用哪种格式将新实体与其关系联系起来。我看到了几个答案,并尝试了所有发现的选项。不幸的是,他们都不适合我。发生以下错误:

Caused by: org.h2.jdbc.JdbcSQLException: NULL not allowed for column "ADDRESS_ID"; SQL statement:

我尝试过的JSON:

{
"name": "test",
"email": "test@email",
"address": "http://localhost:8080/MyApp/address/1"
}

还尝试了以下方法:

"address": {"id":"http://localhost:8080/MyApp/address/1"}

和这个:

"address":{"id":1}

甚至这样:

"address": {
"href": "http://localhost:8080/MyApp/address/1"
}

有没有办法做到这一点,或者只为POST编写自己的控制器实现?谢谢!


问题答案:

如果您有这样的模型:

@Entity
public class User {
    //..
    private String name;

    @OneToMany(mappedBy = "user")
    private Set<Address> addresses = new HashSet<>();
    //..
}

@Entity
public class Address {
    //..
    @ManyToOne
    private User user;
    //..
}

那么你可以发布新的User与它addresses这样的:

POST http://localhost:8080/api/users
{
    "name" : "user1",
    "addresses" : [
        "http://localhost:8080/api/addresses/1",
        "http://localhost:8080/api/addresses/2"
        ]
}

在发布新用户之前,地址ID#1和ID#2必须已经保留。



 类似资料:
  • 我有这些实体: 用户 角色 权限 一个用户有很多角色,一个角色有很多权限。 null

  • 我使用Spring Data Neo4J 5.0.10与Spring Boot 2.0.5。节点I具有以下2个实体,用户兴趣实体和用户兴趣实体的关系。 这很有效。我可以创建一个新用户并将该用户与userInterest关联。当我再次发送相同的详细信息时,节点和边不会重复。 当我在关系实体中启用权重属性时,即使权重属性值相同,关系似乎也是重复的。 我记得我读到过,只要属性相同,就不应该创建另一种关系

  • 在使用Hibernate删除与子实体具有关系的JPA实体时,我遇到了一个问题,但是在使用EclipseLink而不是Hibernate作为JPA提供程序时,相同的代码可以正常工作。父实体上的批注是 当使用Hibernate时,它尝试将子实体上的join列设置为null,但由于该列不允许null而失败。使用EclipseLink时,它首先删除子实体,然后删除父实体,这是所需的行为。 我的问题是: 为

  • 问题内容: 我正在尝试使用JPA 2.0创建具有通用关系的多态实体。应该有两个表,一个事件表和一个通知表。在这些表内是彼此相关的具体实体,如下所示: 从逻辑上讲,这应该在休眠状态下是可能的,因为在SQL中是可能的: 这就是我所拥有的: 使用此代码,我可以持久保存并获取任何Event,Notification,LoginEvent或NotificationEvent,但是当我尝试在JPA 2.0元模

  • 我的两个实体有一对一的关系 我尝试通过此方法删除我的用户实体 PasswordResetTokenRepository类,我在服务方法中调用了该类,用于删除用户,我使用了常规Hibernate方法deleteById(Long id) 但是当我尝试通过此方法删除时,出现此错误:not-null 属性引用 null 或瞬态值:kpi.diploma.ovcharenko.entity.user.Pa

  • 调用关系字段时是否可以在表单类型中使用集合? 以下是我想做的: 我和你有关系 我通过以下方式设置表单类型: 候选类型 分区学校型 因此,我在这里面临两个问题: >