2017-10-19 146 views
0

对我的英语提前感到抱歉。 我试图在实体列表中添加元素,并且只有第一个元素停留在此列表中尝试将元素添加到JPA实体列表时出现奇怪的行为:只有第一个元素持续存在

下面的例子:

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); 

此,在数据库中,该项目和设备是否正确连接(通过映射表),但测试表只包含记录“测试0”后( 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 
} 

测试实体:

@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这里编辑方法是:

public void edit(T entity) { 
     getEntityManager().merge(entity); 
    } 
+0

请向我们展示这两个实体以及执行'project_facade.edit()' – crizzis

+0

当然,做完了 – Nep

+0

'getTestList()'?第一个元素应该实际上是“测试0”吗? – pirho

回答

0

我找到了答案!!!!!我在Project实体的OneToMany注解中添加了“fetch = FetchType.EAGER”!

相关问题