【问题标题】:Spring Data Rest post fails to save nested objectSpring Data Rest 帖子无法保存嵌套对象
【发布时间】:2018-09-20 22:12:24
【问题描述】:

我有这些对象:

@Data
@Entity
@Table
@EqualsAndHashCode(callSuper = true)
public class User extends AbstractEntity implements Serializable {

   private static final long serialVersionUID = -55089179131569489L;

   private String username;
   private String email;
   private boolean admin;
   private String name;
   private String surname;

   @OneToMany(mappedBy = "owner")
   private List<Ad> ads;
}

@Entity
@Table
@Data
@EqualsAndHashCode(callSuper = true)
public class Ad extends AbstractEntity implements Serializable {

    private static final long serialVersionUID = -4590938091334150254L;
    private String name;
    private String description;
    private double price;

    @Enumerated(EnumType.STRING)
    private Category category;

    @ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinColumn(name = "OWNER_ID")
    private User owner;

}

当我尝试使用 Ad.class 类型的对象和 User.class 类型的现有对象(已在数据库中)执行 POST 时,服务仅保存 Ad 对象,并且连接列“OWNER_ID”保持为空.

我认为映射是正确的。你能帮我解决问题吗?

这是我的存储库:

@Repository
@Transactional(readOnly = true)
public interface AdRepository extends PagingAndSortingRepository<Ad, String> 
{}  

这是我的 RestRepository

@RepositoryRestResource(collectionResourceRel = "ad", path = "ad")
public interface AdRestRepository extends PagingAndSortingRepository<Ad, String> {}

【问题讨论】:

  • 请添加您正在尝试的端点和有效负载。

标签: java spring sql-insert hibernate-mapping spring-data-rest


【解决方案1】:

如果我退后一步,概括一下你的问题,

您正在尝试 POST 子资源,并期望

  • 制作新资源(广告)
  • 与所有者(用户)建立关联

只需一次调用即可发生。

但不幸的是 spring-data-rest 确实支持这种行为。您需要 2 次调用才能执行此操作。

  • 一个使资源(广告)=> POST/ads 实际有效负载
  • 第二次使用第一次调用创建的资源的 hateoas 链接users/{ownerId} 建立关联 => POST

查看官方文档的this 部分。

【讨论】:

    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 2021-01-24
    • 2015-07-31
    • 2019-09-30
    • 1970-01-01
    • 2012-10-05
    • 2023-03-27
    • 2013-04-21
    相关资源
    最近更新 更多