亲爱的程序员,我向您寻求以下帮助:
我正在使用 EclipseLink 作为我的应用程序的 ORM,并尝试在我的一个实体(文章)上实现软删除,并在删除具有 OneToMany 关系的类别时级联删除这些文章。
当我删除一篇文章时,一切都按预期工作,但是当我删除一个包含 n 篇文章的类别时,我得到一个例外。我正在使用 DescriptorCustomizer 来完成软删除。
具有以下实现的 DescriptorCustomizer(请参阅org.eclipse.persistence.config.DescriptorCustomizer ):
public class ArticleCustomizer implements DescriptorCustomizer {
@Override
public void customize(ClassDescriptor classDescriptor) throws Exception {
classDescriptor.getQueryManager().setDeleteSQLString("UPDATE article SET ACTIVE = '0' WHERE id = #id");
}
}
我要保存的实体:
抽象项目
@Entity
@Table(name = "item")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class AbstractItem extends BaseEntity {
@ManyToOne
protected Category category;
}
文章
@Entity
@DiscriminatorValue("article")
@Customizer(value=ArticleCustomizer.class)
public class Article extends AbstractItem {
}
类别
@Entity
@Customizer(value=CategoryCustomizer.class)
public class Category extends BaseEntity {
@OneToMany(cascade = CascadeType.REMOVE)
@JoinTable(name = "category_items", joinColumns = @JoinColumn(name = "category_id"), inverseJoinColumns = @JoinColumn(name = "item_id"))
protected List<AbstractItem> items = new ArrayList<AbstractItem>();
@OneToMany(cascade = CascadeType.REMOVE)
@JoinTable(name = "category_subcategories", joinColumns = @JoinColumn(name = "category_id"), inverseJoinColumns = @JoinColumn(name = "parent_category_id"))
protected List<Category> categories = new ArrayList<Category>();
}
当我尝试级联删除具有 n 篇文章的类别时的错误:
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'ACTIVE' in 'field list'
Error Code: 1054
Call: UPDATE article SET ACTIVE = '0' WHERE id = ?
bind => [null]
我可以看到 id 被绑定为 null,但是我不明白为什么。有人可以指导我正确的方向吗?
- Eclipselink 版本:2.4.0
- 春天:3.1.2发布
谢谢!