Устойчивость к многим целям многих для добавления в список объектов
-
12-12-2019 - |
Вопрос
Я получаю список объектов и пытаясь добавить больше значений к нему и у них сохранится на базе данных ... Я бегу в некоторые проблемы, делая это ... Вот что у меня так далеко ...
Provider prov = emf.find(Provider.class, new Long(ID));
.
Эта сущность имеет много для многих отношений, которые я пытаюсь добавить в
List<Organization> orgList = new ArrayList<Organization>();
...
orgList = prov.getOrganizationList();
.
Так что у меня сейчас есть список объектов, связанных с этим объектом.
Я ищу некоторых объектов, чтобы добавить, и я размещаю их в orlist ...
List<Organization> updatedListofOrgss = emf.createNamedQuery("getOrganizationByOrganizationIds").setParameter("organizationIds", AddThese).getResultList();
List<Organization> deleteListOfOrgs = emf.createNamedQuery("getOrganizationByOrganizationIds").setParameter("organizationIds", DeleteThese).getResultList();
orgList.addAll(updatedListofOrgss);
orgList.removeAll(deleteListOfOrgs);
.
Как видите, у меня также есть список узлов удаления удаления. Я слышал где-то, что вам не нужно называть сохраняться на таком оперировании, и что JPA будет сохраняться автоматически.Ну, это, кажется, не работает так.Можете ли вы сохраняться таким образом, или я должен будет пройти через объект таблицы ссылок, и добавить эти значения таким образом?
public class Provider implements Serializable {
@Id
@Column(name="RESOURCE_ID")
private long resourceId;
...
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="DIST_LIST_PERMISSION",
joinColumns=@JoinColumn(name="RESOURCE_ID"),
inverseJoinColumns=@JoinColumn(name="ORGANIZATION_ID"))
private List<Organization> organizationList;
...//getters and setters.
}
.
Таблица ссылок, которая связывает вместе организации и провайдеры ...
public class DistListPermission implements Serializable {
@Id
@Column(name="DIST_LIST_PERMISSION_ID")
private long distListPermissionId;
@Column(name="ORGANIZATION_ID")
private BigDecimal organizationId;
@Column(name="RESOURCE_ID")
private Long resourceId;
}
. Решение
Проблема в том, что вы отсутствуете спецификацию каскада на вашей аннотации @manymany.Тип каскада по умолчанию для @Manynomay не является типов каскада, поэтому любые изменения в коллекции не сохраняются.Вам также необходимо добавить @ElementDepdented Annotation, чтобы убедиться, что любые предметы, удаленные из коллекции, будут удалены из базы данных.Итак, вы можете изменить реализацию вашего провайдера следующим образом:
@ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@ElementDependent
@JoinTable(name="DIST_LIST_PERMISSION",
joinColumns=@JoinColumn(name="RESOURCE_ID"),
inverseJoinColumns=@JoinColumn(name="ORGANIZATION_ID"))
private List<Organization> organizationList;
.
Поскольку ваш класс провайдера управляется, вам не нужно использовать объект;Изменения должны автоматически вступать в силу при совершении транзакции.