java - Spring Data Rest 发布无法保存嵌套对象

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

我有这些对象:

@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 的对象执行 POST 并在类型为 User.class 的现有对象(已在数据库中)中执行时,服务仅保存 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> {}

最佳答案

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

您正在尝试POST一个子资源并期望这两个操作

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

只需一次调用即可实现。

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

  • 制作资源 (Ad) => POST/ads 并带有实际负载
  • 第二次使用第一次调用创建的资源的 hateoas 链接 关联 => POSTusers/{ownerId} .

看看this官方文档部分。

关于java - Spring Data Rest 发布无法保存嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52434052/

相关文章:

java - 即使步骤仍在运行,如何计算 ItemReader 中的 stepReads 以使中间结果可用?

java - 在 Spring MVC 应用程序中从异常日志记录更改为异常处理的最简单方法是什么?

java - 使用 Apache Tika 从存档中仅提取文件名

java - 类文件中的内部类属性有什么用?

java - 无法使用 Spring javamail 在电子邮件中发送图像

spring - jdbc-initialize-database 找不到脚本文件 - DataAccessResourceFailureException

php - 使用 php 随机数生成器在 Mysql 中创建多行

sql - Derby DB 插入错误 SQL 状态 21000

SQL 插入行的顺序重要吗?

java - 使用泛型参数重写方法