2017-10-19 17 views
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 필드가 올바른지).

는 첫 번째 요소에 대한 작업을 왜 이해가 안 ...

당신의 도움을 주셔서 감사합니다!

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

프로젝트 엔티티 :

@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를 확장

+0

'project_facade.edit()'의 구현뿐만 아니라 두 엔티티도 함께 보여주십시오. – crizzis

+0

물론 getTestList()의 – Nep

+0

구현을 완료 했습니까? 첫번째 요소가 실제로'Test 0'이어야합니까? – pirho

답변

0

답변을 찾았습니다 !!!!! Project 엔티티의 OneToMany 주석에 "fetch = FetchType.EAGER"를 추가했습니다!