Hibernate的Cascade怎么用?数组成员删不掉

/**
 *  地图信息
 *
 */
@SuppressWarnings("serial")
@Entity
public class MapInfo {
 int id;
 String name;
 NpcInfo[] activities;
 @Id
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }

于是,事实上,数据里有两张表,一张Mapinfo,一张MapInfo_activities.第二张表会引用第一张表。

 @CollectionOfElements
 @IndexColumn(name = "aid", base = 1) 
 @Cascade({ org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
 public NpcInfo[] getActivities() {
  return activities;
 }

 public void setActivities(NpcInfo[] activities) {
  this.activities = activities;
 }
}

/**
 *  NPC信息
 *
 */
@Embeddable
public class NpcInfo{
 int id;
 String name;
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }  
}

然后我这么删除

s.createQuery("delete from MapInfo").executeUpdate();

结果呢,它直接就在MapInfo这张表执行delete,而没有先去MapInfo_activities中执行delete。

我用的数据库是Mysql InnoDB。它报告说“foreign key constraint fails”。

郁闷~~ 不知道为什么。我明明已经设置了@Cascade({ org.hibernate.annotations.CascadeType.DELETE_ORPHAN})

啊,hibernate好神奇

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥