EclipseLink brings together an unexpected cascade

I have two custom classes and devices.

User object:

public class User {
    private Long userId;

    @OneToMany( mappedBy = "userId", fetch = FetchType.LAZY)
    private Collection<Device> deviceCollection;

and device object:

public class Device implements Serializable {
    @JoinColumn(name = "user_id", referencedColumnName = "user_id")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private User userId;

When I merge a previously disconnected device object in the entity manager after the parent user has been deleted, both the user (previously deleted) and the device are reinserted into the database. There is no cascading annotation for the user or device; therefore, I do not expect the user object to be reinserted, but it did;

How to prevent cascade merge operation for custom object?

Thanks in advance.

+5
source share
4 answers

, , Session Manager , , ( )

, merge, , Prev + . .

- , , .

, - . Eclipse Link

Query query = entityManager
            .createNamedQuery("User.FindByUserId");
    User fromDatabase = null;
    try {
        query.setParameter("userId", device.getUser().getUserId());
        fromDatabase = (User) query.getSingleResult();

    } catch (NoResultException noResultException) {
        // There is no need to do anything here.
    }
    if (fromDatabase == null) {
        User user= entityManager.merge(device.getUser());
         device.setUser(user);
    } else {
        device.setUser(user);
    }
    entityManager.persist(device);
0

insertable = false, updatable = false JoinColumn,

@JoinColumn(name = "user_id", referencedColumnName = "user_id", insertable=false, updatable=false)
0

, . , , , , . , , , , , , / . , , , , , .

0

: EntityManager.merge() , . , EclipseLink ( )

Edit:

, , " ", , , , . , = MERGE cascade = ALL, , .

Merge? .

-1

All Articles