Spring MVC 3 Hibernate JPA Аннотации onetomany и manytoone отношения каскад удалить - PullRequest
0 голосов
/ 06 октября 2011

У меня есть следующие объекты, и я должен удалить записи ServiceRegistration и ServiceChannels при удалении записи ServiceRegistration. Но теперь, если я удаляю запись в службе регистрации, она удаляет записи в канале, который является таблицей метаданных.

ServiceRegistration.Java

@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name = "ServiceChannel", joinColumns = {
 @JoinColumn(name="serviceid", unique = true) 
 },
 inverseJoinColumns = {
 @JoinColumn(name="channelid")
 }
 )

 private List<Channels> channelsInvolved;

     public List<Channels> getChannelsInvolved() {
    return channelsInvolved;
  }

public void setChannelsInvolved(List<Channels> channelsInvolved) {
    this.channelsInvolved = channelsInvolved;
  }

ServiceChannels.java

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column private int servicechannelid;    

@ManyToOne
@JoinColumn(name = "serviceid")
private ServiceRegistration serviceRegistration;

@ManyToOne
@JoinColumn(name = "channelid")
private Channels channels;

Channels.java >> содержит метаданные

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column private int channelid;
@Column private String channelname;

@Override
    public boolean equals(final Object obj) {
        if (obj instanceof Channels) {
            final Channels other = (Channels) obj;
            if (other.getChannelid() == getChannelid()) {
                return true;
            }
        } 
        return false;
    }

Пожалуйста, помогите мне, как сделать каскадное удаление в этом отношении сущности.

1 Ответ

0 голосов
/ 06 октября 2011

Во-первых, если вы не хотите удалять каналы при удалении регистрации службы, вы должны сделать:

@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "ServiceChannel", joinColumns = {
 @JoinColumn(name="serviceid", unique = true) 
 },
 inverseJoinColumns = {
 @JoinColumn(name="channelid")
 }
 )

 private List<Channels> channelsInvolved;

При регистрации службы (отключить каскадирование).

Также,если вы хотите удалить свой ServiceChannel при удалении ServiceRegistration, вы должны настроить отношения на стороне ServiceRegistration:

@OneToMany(mappedBy="serviceRegistration", cascade=CascadeType.REMOVE) // Edited to specify the owning side of the relationship
private List<ServiceChannel> serviceChannels;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...