我在休眠JPA注释一对多关系工作,这里是我的表和实体类的细节...Hibernate注解一个一对多的亲子删除
Service (entity class: ServiceRegistration.java)
=======
serviceid
servicename
channel meta table (entity class: Channels.java)
========
channelid
channelname
service_channel (entity class: ServiceChannels.java)
===============
seq_id
serviceid
channelid
这里,service_channel表有服务ID和channelid作为forign键..我可以获取,修改记录。
,但我无法能够删除服务和它的子记录。如果我删除服务表中的记录,对应的service_channel表中的记录应该被删除。这里是我的实体类的细节...
另外,我得到重复的记录..说如果一个服务(service1)有2个通道关联,当我获取服务列表时,我看到列表中的2个service1条目。
serviceregistration.java
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "multichannel_service_channel", joinColumns = {
@JoinColumn(name="serviceid", unique = true)
},
inverseJoinColumns = {
@JoinColumn(name="channelid")
}
)
private Set<Channels> channelsInvolved;
@OneToMany(mappedBy="serviceRegistration")
@Cascade(org.hibernate.annotations.CascadeType.REMOVE)
private List<ServiceChannel> serviceChannels;
servicechannel.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
@Column
private int channelid;
@Column
private String channelname;
@Column
private String channeldescription;
@Column
private boolean isactive;
请帮助解决这个问题。
Thanks al ot为你的答案,这是我试过..... ** @ OneToMany(mappedBy =“serviceRegistration”) @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) private List serviceChannels; **我得到的错误.....批量更新返回意外的行数从ü pdate [0];实际行数:0;预计:1;嵌套异常是org.hibernate.S taleStateException:批处理更新从update [0]返回意外的行计数; 实际行数:0;预计:1 –
Surez
我不知道你跑了什么,我认为没有人可以帮助你。但是,根据我的经验,StaleStateException似乎是另一个与此问题无关的问题。你可以做一个简单的测试,试试DELETE_ORPHAN,并确保你知道你正确使用它?我担心你的代码中不仅有一个问题会使你的问题复杂化。 –