Project使用Hibernate 3.5,Spring Webflow 2和Hibernate Envers进行审计.Envers在hibernate.cfg.xml中配置.我在实体'ArticleGroup'和'Article'之间有一对多的关系映射.表'articles'有一个外键'article_group_id'引用表'article_groups'中的id.在前端,当我删除一篇文章时,Hibernate Envers会为删除后事件抛出约束违例异常.如果我不使用Envers,删除操作工作正常.这两个实体定义如下
@Entity
@Table(name="article_groups")
@Audited
public class ArticleGroup implements Serializable {
@OneToMany(mappedBy="articleGroup", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@OrderBy("id")
private List<Article> articles;
// other fields, getters and setters
}
@Entity
@Table(name="articles")
@Audited
public class Article implements Serializable {
@ManyToOne
@JoinColumn(name = "article_group_id")
private ArticleGroup articleGroup;
// other fields, getters, setters
}
Run Code Online (Sandbox Code Playgroud)
文章删除编码如下:
@Service("articleManager")
public class ArticleManagerImpl implements ArticleManager {
// inject dao
@SuppressWarnings("unchecked")
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void deleteArticle(Article article, Object articles) { …Run Code Online (Sandbox Code Playgroud) 我在两个实体“menu_groups”和“pages”之间有多对多关系,如下所示
public class MenuGroup {
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "menu_group_pages",schema="live",
joinColumns=@JoinColumn(name="menu_groups_id"),
inverseJoinColumns=@JoinColumn(name="pages_id"))
private Set<Page> pages = new HashSet<Page>();
}
public class Page {
@ManyToMany(fetch = FetchType.EAGER, mappedBy="pages",
cascade={CascadeType.MERGE})
private Set<MenuGroup> menuGroups = new HashSet<MenuGroup>();
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,有一个连接表,其中有两个 fk:menu_groups_id 和 Pages_id。现在我想在此连接表中添加 fk 'pages_id' 的删除级联操作。对于普通表,该语句类似于
@OnDelete(action=OnDeleteAction.CASCADE)
Run Code Online (Sandbox Code Playgroud)
我怎样才能对连接表执行此操作?谢谢
这是代码
void openFile_ActionPerformed(ActionEvent e) {
// some code here
worker.setFile(file);
worker.start();
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if (actDone) {
if (timer != null)
timer.stop();
// How to return from the openFile_ActionPerformed() method after this line?
progressWindow.threadCompleted(worker);
}
}
};
timer = new Timer( 100 , taskPerformer);
timer.setRepeats(true);
timer.start();
progressWindow.display();
}
Run Code Online (Sandbox Code Playgroud)
我希望该方法在行之后返回openFile_ActionPerformed方法
progressWindow.threadCompleted(worker);
Run Code Online (Sandbox Code Playgroud)
但这是一个内部阶级.我试图把"回归" 它似乎从内部类中的方法"actionPerformed()"返回.
如何从内部类中的方法返回外部方法?谢谢