Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:在持久集合中重用持久类_Java_Hibernate - Fatal编程技术网

Java Hibernate:在持久集合中重用持久类

Java Hibernate:在持久集合中重用持久类,java,hibernate,Java,Hibernate,我正在使用hibernate并编写代码来填充一个空数据库。让我们假装我在坚持句子、短语和字母。由于字母同时出现在短语和句子中,我将让每个LetterEntity都有一个对其SentenceEntity的引用,每个SentenceEntity都有一个字母集合 @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.LAZY) @JoinColumn(name="sentenceid") @Sort(t

我正在使用hibernate并编写代码来填充一个空数据库。让我们假装我在坚持句子、短语和字母。由于字母同时出现在短语和句子中,我将让每个
LetterEntity
都有一个对其
SentenceEntity
的引用,每个
SentenceEntity
都有一个字母集合

@OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.LAZY)
@JoinColumn(name="sentenceid")
@Sort(type=SortType.NATURAL)
public SortedSet<LetterEntity> getLetters() {
    return this.letters;
}
当我填充数据库时,我只需设置字母的
setcentenceid
,将其添加到句子集合中。但是,当我也使用
setLetters
将字母添加到短语中时,Hibernate再次尝试保留字母,我得到一个异常。我如何才能在短语中添加字母,而不让Hibernate再次尝试将其保留

更新:我发现阅读双射关联非常有帮助

虽然不是我问题的一部分,但我建立了许多双射关联。我发现它们是必要的,部分原因是它使批量插入更快。向集合添加元素时,Hibernate会发出更新查询


更新:我是个白痴。短语和字母之间的关系是多对多的,实际上我遇到了一个例外,因为我违反了一个关键约束。

您是如何创建关系的。下面的代码在您的案例中似乎是合适的,可以正常工作

    LetterEntity letter = new LetterEntity();
    PhraseEntity phrase = new PhraseEntity();
    SentenceEntity sentence = new SentenceEntity();

    sentence.getLetters().add(letter);
    s.persist(sentence);
    phrase.getLetters().add(letter);
    s.persist(phrase);

因此,我保留句子,保留字母,并将其句子设置为
句子
,然后将字母添加到短语中。也许这就是问题所在。
    LetterEntity letter = new LetterEntity();
    PhraseEntity phrase = new PhraseEntity();
    SentenceEntity sentence = new SentenceEntity();

    sentence.getLetters().add(letter);
    s.persist(sentence);
    phrase.getLetters().add(letter);
    s.persist(phrase);