2015-06-08 46 views
1

我有問題,我有一個多對多的關係,我想添加或刪除集合中的項目。 *彈簧數據JPA多對多保存設置

@Entity 
@DiscriminatorValue("P") 
public class Patient extends User{ 
    private String firstName; 
    private String lastName; 
    @Embedded 
    private Address address; 

    @ManyToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL) 
    @JoinTable(name="PatientOrganisation", joinColumns = {@JoinColumn(name="patientId")}, inverseJoinColumns = {@JoinColumn(name="organisationId")}) 
    private Set<Organisation> organisations = new HashSet<Organisation>(); 
} 

*

@Entity 
@DiscriminatorValue("O") 
public class Organisation extends User{ 

    @Column(name="organisationName") 
    private String name; 

    @ManyToMany(mappedBy="organisations", fetch=FetchType.LAZY, cascade=CascadeType.ALL) 
    private Set<Patient> patients = new HashSet<Patient>(); 
    } 

這是我的兩個實體。

現在我試着寫一個自定義的保存梅索德這樣

公共接口OrganisationRepository擴展

PagingAndSortingRepository<Organisation, Long>{ 

    @Query (value="insert into patient_organisation(patient_id, organisation_id) values ([?1], [?2])", nativeQuery=true) 
    Organisation addPatient(Long patientId, Long organisationId); 
} 

但沒有工作,我得到這個錯誤。

不能用executeQuery()發出數據操作語句。

有沒有更聰明的方法來做到這一點,或有人可以幫我解決這個錯誤。

謝謝, 克里斯

回答

2

我不明白爲什麼你決定寫這本機查詢,我將讓ORM將記錄添加到多對多剛剛添加用戶到組織的用戶組像這樣:

@Service 
@Transactional 
public class OrganisationDataService { 
    @Autowired 
    CrudRepository<Organisation, Long> organisations; 

    @Autowired 
    CrudRepository<User, Long> users; 

    public void addUserToOrganisation(Long patientId, Long organisationId) { 
     Organisation organisation = organisations.findOne(organisationId); 
     User user = users.findOne(patientId); 
     organisation.getPatients().add(user); 
     organisations.save(organisation); 
    } 
}