Ich benutze Ninja Framework und ich versuche, eine Tabelle zu erstellen, die zwei Listen von anderen Tabellen der gleichen Art hat. Das Problem besteht darin, dass der gesamte Inhalt der anderen Liste ebenfalls in der anderen Liste enthalten ist.Erstellen einer Tabelle in Ebean mit zwei Listen Verbindung zu einer anderen Tabelle
Main:
test();
List<Foo> foos = Foo.find.all();
for(Foo foo : foos){
System.out.println("Printing bars1, size: " + foo.getBars1().size());
for(Bar bar : foo.getBars1()){
System.out.println(bar.getText());
}
System.out.println("Printing bars2, size: " + foo.getBars2().size());
for(Bar bar : foo.getBars2()){
System.out.println(bar.getText());
}
}
Funktionstest:
private void test() {
Foo foo = new Foo();
Bar bar1 = new Bar();
Bar bar2 = new Bar();
bar1.setText("This should only be in bars1");
bar2.setText("This should only be in bars2");
foo.getBars1().add(bar1);
foo.getBars2().add(bar2);
foo.save();
}
Foo:
package models;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
@Entity
public class Foo extends BaseModel {
public static final Find<Long, Foo> find = new Find<Long, Foo>() {};
@OneToMany(cascade = CascadeType.ALL)
private List<Bar> bars1;
@OneToMany(cascade = CascadeType.ALL)
private List<Bar> bars2;
public List<Bar> getBars1() {
return bars1;
}
public void setBars1(List<Bar> bars1) {
this.bars1 = bars1;
}
public List<Bar> getBars2() {
return bars2;
}
public void setBars2(List<Bar> bars2) {
this.bars2 = bars2;
}
}
Bar:
package models;
import javax.persistence.Entity;
import javax.validation.constraints.Size;
@Entity
public class Bar extends BaseModel {
public static final Find<Long, Bar> find = new Find<Long, Bar>() {};
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Drucken von Haupt:
Printing bars1, size: 2
This should only be in bars1
This should only be in bars2
Printing bars2, size: 2
This should only be in bars1
This should only be in bars2
Erwartet:
Printing bars1, size: 1
This should only be in bars1
Printing bars2, size: 1
This should only be in bars2
Haben Sie versucht, 'CascadeType' auf einen anderen Wert zu setzen? Es scheint mir eine schlechte Idee zu sein, 'CascadeType.ALL' einzutippen oder es komplett zu entfernen und zu sehen, ob das Verhalten gleich bleibt. Wenn Sie nicht wissen, dass der Grund des Problems alle Persistenzoperationen von "Bar" bis zum "Foo" weiterleitet, was zum Überschreiben der Tabelle führen könnte (das Verbinden von zwei Listen in einer Tabelle) – MichaelDD