EclipseLink удаляет ссылочный объект - PullRequest
0 голосов
/ 27 мая 2011

Я использую EclipseLink в качестве своей единицы сопротивления. У меня проблема с удалением объекта. Следующий пример: устройство имеет тип. Есть много устройств, которые могут быть одного типа. Я вставил представление типов и устройств (которые относятся к типу). Если я сейчас удаляю тип (к которому относится устройство), сущность удаляется из базы данных. Этого не должно быть, поскольку устройство относится к этому типу. Что я делаю не так?

Заранее спасибо!

Я удаляю, как показано ниже:

EntityManager em = factory.createEntityManager();
em.getTransaction().begin();

Query q = em.createQuery("SELECT d FROM DeviceType d WHERE d.name = :name");
q.setParameter("name", "Name");
Type type = (Type)q.getSingleResult();

em.remove(type);
em.getTransaction().commit();
em.close();

Мои объекты:

@Entity
public class Device {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne
    @JoinColumn(name="TYPE_ID", nullable = false)
    private Type type;
}
@Entity
public class Type {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true, nullable = false)
    private String name;    
}

1 Ответ

0 голосов
/ 27 мая 2011

Я не уверен, что я ясно понимаю проблему - ожидаете ли вы исключения, когда вы вызываете remove (тип)?Если это так, убедитесь, что у вас установлено ограничение базы данных в отношении Device-> Type, что приведет к исключению при удалении.Как создаются таблицы?

Если проблема в том, что вы получаете исключение, потому что вы не должны удалять объект, не очистив сначала ссылки на него.Должен запросить устройство и исправить все ссылки на тип перед его удалением, т.е.Вы также можете изменить сопоставление на ManyToOne, а затем установить OneToMany в типе обратно на устройство, если вы хотите иметь доступ к ним из экземпляра типа.

...