为什么@OneToMany关系中的@Many方需要引用@One方面?

时间:2018-01-20 00:13:36

标签: java spring hibernate

我只花了两个小时拉出我的头发,想知道为什么@OneToMany关系中的@Many方总是包含所有者的空id值。 我有两个Hibernate实体,User和Purchase。用户可以进行多次购买,购买只能属于一个用户。以下是我的代码片段

//在实体用户

toLowerCase()

//在实体购买

document.getElementById('read').onclick = function(event) {
  var input = document.getElementById('input').value.split(" ");
  var inputLower = new Array(input.length);

  var keywords = document.getElementById('keywords').value.split(" ");

  // create output array
  var outputs = new Array();
  // create arrays with lowercase words
  for (var k = 0; k < input.length; k++) {
    inputLower.push(input[k].toLowerCase());
  }
  var keywordsLower = new Array(keywords.length);
  for (var k = 0; k < keywords.length; k++) {
    keywordsLower.push(keywords[k].toLowerCase());
  }
  alert(input.length + "  " + keywords.length);
  for(var i = 0; i < input.length; i++) {
    for(var j = 0; j < keywords.length; j++) {
      if(inputLower[i].includes(keywordsLower[j])) {
        for (k = Math.max(i - 10, 0); k <= Math.min(i + 10, input.length - 1); k++) {
            // add at most 10 words before and 10 words after the matched word to the output
            outputs.push(input[k]);
        }
        outputs.push("\n\n");
      }
    }
  }
  // join the words of the output with a space
  output.value = outputs.join(' ');
}

现在,当我向用户的“购买”添加新购买时,我意识到用户的ID不会自动链接到相应的购买。我必须在这里手动调用方法setUser(用户用户):

//在User类

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private Set<Purchase> purchases = new HashSet<Purchase>();

为什么第二行必要?

2 个答案:

答案 0 :(得分:0)

您需要一个单独的功能来将用户链接到您的程序的其他部分。我不知道程序包含什么,但要确保你有一个getter函数。

答案 1 :(得分:0)

您必须提交您的交易,以便Hibernate可以自动为您填写user字段。否则,Hibernate无法知道您的实体何时准备好提交到数据库。