我只花了两个小时拉出我的头发,想知道为什么@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>();
为什么第二行必要?
答案 0 :(得分:0)
您需要一个单独的功能来将用户链接到您的程序的其他部分。我不知道程序包含什么,但要确保你有一个getter函数。
答案 1 :(得分:0)
您必须提交您的交易,以便Hibernate可以自动为您填写user
字段。否则,Hibernate无法知道您的实体何时准备好提交到数据库。