双向映射不接收父级

时间:2018-09-21 22:11:09

标签: spring spring-data-jpa one-to-many many-to-one

我在两个实体之间有双向关系。这是两个类,省略了getters / setter方法:

@Entity
@Table(name = "strategy")
public class Strategy {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String name;

    @OneToMany(mappedBy = "strategy", cascade = { CascadeType.ALL })
    private List<StrategyDetail> details;
}

还有

public class StrategyDetail {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String content;

    @ManyToOne()
    private Strategy strategy;
 }

然后我对此有一个存储库和控制器,但是没有什么值得一提的(我的存储库仅扩展了JpaRepository,并且控制器具有一个get / post映射)。

当我尝试创建策略时,我发送以下JSON:

{
    "name": "my strat",
    "details": [{
        "content": "my content"
    }]
}

响应是这样的:

{
    "id": 1,
    "name": "my strat",
    "details": [
        {
            "id": 2,
            "content": "my content",
            "strategy": null
        }
    ]
}

我不明白为什么这里的策略为null,映射非常明显。然后,当我尝试制定策略时,答案是这样的:

[
    {
        "id": 1,
        "name": "my strat",
        "details": []
    }
]

我猜这是按预期的方式工作(外键失败,因此详细信息尚未保存?)。

我应该进行哪些更改才能使其正常工作(意味着可以访问strategyDetail中的策略)?我认为更好的是,应该拥有策略ID,而不是整个策略。

我尝试通过删除StrategyDetail中的strategy属性来消除双向性,然后确实保存了详细信息,但是显然我无法访问详细信息中的strategy字段...

在过去的一个小时中,我一直在寻找解决方案,看了教程,但没有找到,但是我没有找到有效的解决方案。

0 个答案:

没有答案