0
あらかじめ私の英語を残念に思っています。 エンティティリストに要素を追加しようとしていますが、最初の要素のみがこのリストに残ります。ここでJPAエンティティリストに要素を追加しようとするときに奇妙な動作が発生する:最初の要素のみが残る
例:このデータベースでは、プロジェクトとマシンが(マッピングテーブルを介して)正しくリンクが、テストテーブルにはレコードのみ「テスト0」が含まれている後
Project project = project_facade.find(1L);
Machine machine = machine_facade.find(1L);
for(int i=0;i<3;i++){
Test test = new Test();
test.setName("Test "+i);
test.setProject(project);
test.setMachine(machine);
project.getTestList().add(test);
machine.getTestList().add(test);
}
project.getMachineList().add(machine);
machine.getProjectList().add(project);
project_facade.edit(project);
( project_idフィールドとmachine_idフィールドが正しい)。
それが唯一の最初の要素のための仕事だ、なぜ私は理解していない...
あなたの助けをありがとう!
プロジェクトエンティティ:
@Entity
public class Project implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "name")
private String name;
@ManyToMany(mappedBy = "projectList", cascade = CascadeType.ALL)
private List<Machine> machineList;
@OneToMany(mappedBy = "project", cascade = CascadeType.ALL *SOLUTION : ,fetch = FetchType.EAGER*)
private List<Test> testList;
//constructor, getters, setters
}
マシンエンティティ:
@Entity
public class Machine implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "name")
private String name;
@JoinTable(name = "project_machine", joinColumns = {
@JoinColumn(name = "machine", referencedColumnName = "id")}, inverseJoinColumns = {
@JoinColumn(name = "project", referencedColumnName = "id")})
@ManyToMany
private List<Project> projectList;
@OneToMany(mappedBy = "machine",cascade = CascadeType.ALL)
private List<Test> testList;
//constructor, getters, setters
}
テストエンティティ:
public void edit(T entity) {
getEntityManager().merge(entity);
}
:
@Entity
public class Test implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 64)
@Column(name = "name")
private String name;
@JoinColumn(name = "project", referencedColumnName = "id")
@ManyToOne(optional = false)
private Project project;
@JoinColumn(name = "machine", referencedColumnName = "id")
@ManyToOne(optional = false)
private Machine machine;
//constructor, getters, setters
}
そして、すべて私のファサードが編集方法があるAbstractFacadeを拡張
'project_facade.edit()の実装と同様に、両方のエンティティを表示してください – crizzis
もちろん、' getTestList() 'の実装は – Nep
ですか?最初の要素は実際には 'Test 0'ですか? – pirho