Spring 数据 JPA 多对多保存设置
Spring Data JPA Many to Many save to set
我有一个问题,我有一个多对多的关系,我想在集合中添加或删除项目。
*
@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>();
}
这是我的两个实体。
现在我试着写一个像这样的自定义保存方法
public 接口 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() 发出数据操作语句。
有没有更聪明的方法来做到这一点,或者有人可以帮我解决这个错误。
谢谢,
克里斯
我不太清楚你为什么决定为此编写本机查询,我会让 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);
}
}
我有一个问题,我有一个多对多的关系,我想在集合中添加或删除项目。 *
@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>();
}
这是我的两个实体。
现在我试着写一个像这样的自定义保存方法
public 接口 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() 发出数据操作语句。
有没有更聪明的方法来做到这一点,或者有人可以帮我解决这个错误。
谢谢, 克里斯
我不太清楚你为什么决定为此编写本机查询,我会让 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);
}
}