【问题标题】:@OneToMany mapped by doesn't make an entry to the table映射的@OneToMany 不会进入表
【发布时间】:2017-05-24 17:05:31
【问题描述】:

这里我有两个实体类。我使用了 OneToMany 和 ManyToOne 映射。

@Entity
@Table(name="test_user")
public class TestUser  {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer user_id;
    private String user_name;
    @OneToMany(mappedBy = "testuser", fetch=FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<UserAnswer> answer = new HashSet<UserAnswer>();



    public Set<UserAnswer> getAnswer() {
        return answer;
    }

    public void setAnswer(Set<UserAnswer> answer) {
        this.answer = answer;
    }

    public Integer getUser_id() {
        return user_id;
    }

    public void setUser_id(Integer user_id) {
        this.user_id = user_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    }

这是我的第二个实体类

@Entity
@Table(name="user_answer")
public class UserAnswer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer answer_id;
    private String answer;

    @ManyToOne
    @JoinColumn(name="user_id")
    private TestUser testuser;


    public TestUser getTestuser() {
        return testuser;
    }
    public void setTestuser(TestUser testuser) {
        this.testuser = testuser;
    }
    public Integer getAnswer_id() {
        return answer_id;
    }
    public void setAnswer_id(Integer answer_id) {
        this.answer_id = answer_id;
    }
    public String getAnswer() {
        return answer;
    }
    public void setAnswer(String answer) {
        this.answer = answer;
    }   
}

当我插入用户并回答时,user_id 没有存储在 user_answer 表中。 这是我的 JSON 输入格式。

{
    "user_name":"myname",
    "answer":[
        {
            "answer":"myanswer"
        }
    ]
}

当我获取数据时,我会收到这样的 JSON 响应,

[
{
    "user_id": 52,
    "user_name": "myname",
    "answer": []
  }
]

这是我的服务代码sn-p,

@Autowired
    private TestUserRepository repo;

@Override
    public TestUser addUser(TestUser user) {

        return repo.save(user);
    }

这是我的控制器代码 sn-p

@Autowired
    private TestUserApiService service;

    @RequestMapping(value = "/saveuser", produces = { "application/json" }, consumes = { "application/json" }, method = RequestMethod.POST)
    public ResponseEntity<TestUser> addUser(@RequestBody TestUser user)
            throws NotFoundException {
        return new ResponseEntity<TestUser>(service.addUser(user),
                HttpStatus.OK);

    }

【问题讨论】:

  • 如何插入?分享您的服务代码
  • 我已经包含了我的服务和控制器代码

标签: spring hibernate spring-mvc spring-boot spring-data


【解决方案1】:

这里的关系是双向的,这意味着关系的每一边都应该有对另一边的引用。

您的输入格式具有 TestUser ,其中设置了 UserAnswer ,因为您将 UserAnswer 级联到您的 TestUser 中,您希望保持关系,但您的 UserAnswer 也应该具有对 TestUser 的引用以完成关系。

您可以做两件事,首先您可以使您的关系单向,或者您可以提取即将到来的 UserAnswer 并将 TestUser 注入它们然后持久化 TestUser

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多