Устойчивость к многим целям многих для добавления в список объектов

StackOverflow https://stackoverflow.com//questions/12678161

  •  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;
.

Поскольку ваш класс провайдера управляется, вам не нужно использовать объект;Изменения должны автоматически вступать в силу при совершении транзакции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top