Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在带注释的hibernate中引入ondelete级联_Java_Hibernate_Hibernate Annotations - Fatal编程技术网

Java 如何在带注释的hibernate中引入ondelete级联

Java 如何在带注释的hibernate中引入ondelete级联,java,hibernate,hibernate-annotations,Java,Hibernate,Hibernate Annotations,我刚开始冬眠。我需要在hibernate中引入带有注释的删除功能。一旦我们删除父记录,它就需要删除子记录,即我需要引入ondelete级联功能。你能帮我介绍一下这个功能吗。请在下面找到java/实体代码 @Entity @Table(name = "atfLabel", uniqueConstraints = @UniqueConstraint(columnNames = {"key_", "module_id"})) @SuppressWarnings("serial") public cla

我刚开始冬眠。我需要在hibernate中引入带有注释的删除功能。一旦我们删除父记录,它就需要删除子记录,即我需要引入ondelete级联功能。你能帮我介绍一下这个功能吗。请在下面找到java/实体代码

@Entity
@Table(name = "atfLabel", uniqueConstraints = @UniqueConstraint(columnNames = {"key_", "module_id"}))
@SuppressWarnings("serial")
public class Label {
    private long id;
    private ModuleImpl module;
    private String key;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)   
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

    @ManyToOne(optional=false)
    @JoinColumn(name="module_id", nullable=false, updatable=false)
    public ModuleImpl getModule() {
        return module;
    }
    public void setModule(ModuleImpl module) {
        this.module = module;
    }

    @Column(name="key_", length=160)
    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }   
}

@Entity
@Table(name = "atfModule")
@SuppressWarnings("serial")
public class ModuleImpl implements Module {
    private long id;
    private String name;
    private String description;

    @OneToMany(mappedBy="module")
    @Cascade(CascadeType.DELETE)
    private List<Label> label;

    @Override
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    @Override
    @Column(length=200, unique=true, nullable=false)
    public String getName() {
        return name;
    }

    @Override
    @Column(length=2000)
    public String getDescription() {
        return description;
    }

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

    @Override
    public void setDescription(String desc) {
        this.description=desc;
    }
}

@Entity
@Table(name = "atfLabelText",
    uniqueConstraints = @UniqueConstraint(columnNames = { "label_id", "tenant_id", "locale" }))
@SuppressWarnings("serial")
public class LabelText {
    private long id;
    private Label label;
    private TenantImpl tenant;
    private String locale;
    private String text;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long getId() {
        return id;
    }

    @ManyToOne(optional = false)
    @JoinColumn(name = "label_id", nullable = false, updatable = false)
    public Label getLabel() {
        return label;
    }

    public String getLocale() {
        return locale;
    }

    @ManyToOne(optional = true, fetch = FetchType.LAZY)
    @JoinColumn(name = "tenant_id", nullable = true, updatable = false)
    public TenantImpl getTenant() {
        return tenant;
    }

    @Column(length = 1500)
    public String getText() {
        return text;
    }

    public void setId(long id) {
        this.id = id;
    }

    public void setLabel(Label label) {
        this.label = label;
    }

    public void setLocale(String locale) {
        this.locale = locale;
    }

    public void setTenant(TenantImpl tenant) {
        this.tenant = tenant;
    }

    public void setText(String text) {
        this.text = text;
    }
}
@实体
@表(name=“atfLabel”,uniqueConstraints=@UniqueConstraint(columnNames={“key_”,“module_id”}))
@抑制警告(“串行”)
公共类标签{
私人长id;
私有模块impl模块;
私钥;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
@多通(可选=假)
@JoinColumn(name=“module_id”,nullable=false,updateable=false)
公共模块impl getModule(){
返回模块;
}
公共空集合模块(ModuleImpl模块){
this.module=模块;
}
@列(name=“key”,长度=160)
公共字符串getKey(){
返回键;
}
公共无效设置键(字符串键){
this.key=key;
}   
}
@实体
@表(name=“atfModule”)
@抑制警告(“串行”)
公共类ModuleImpl实现模块{
私人长id;
私有字符串名称;
私有字符串描述;
@OneToMany(mappedBy=“模块”)
@级联(级联类型.删除)
私有列表标签;
@凌驾
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
@凌驾
@列(长度=200,唯一性=true,可空性=false)
公共字符串getName(){
返回名称;
}
@凌驾
@列(长度=2000)
公共字符串getDescription(){
返回说明;
}
@凌驾
公共void集合名(字符串名){
this.name=name;
}
@凌驾
公共void setDescription(字符串描述){
此.description=desc;
}
}
@实体
@表(name=“atfLabelText”,
uniqueConstraints=@UniqueConstraint(columnNames={“label\u id”、“tenant\u id”、“locale”}))
@抑制警告(“串行”)
公共类标签文本{
私人长id;
自有品牌;
私人租户;
私有字符串区域设置;
私有字符串文本;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
公共长getId(){
返回id;
}
@多通(可选=假)
@JoinColumn(name=“label\u id”,nullable=false,updateable=false)
公共标签getLabel(){
退货标签;
}
公共字符串getLocale(){
返回区域设置;
}
@manytone(可选=true,fetch=FetchType.LAZY)
@JoinColumn(name=“tenant\u id”,nullable=true,updateable=false)
公共租户{
归还承租人;
}
@柱(长度=1500)
公共字符串getText(){
返回文本;
}
公共无效集合id(长id){
this.id=id;
}
公共无效设置标签(标签标签){
this.label=标签;
}
公共void setLocale(字符串区域设置){
this.locale=locale;
}
公共无效设置(租户){
this.tenant=租户;
}
公共void setText(字符串文本){
this.text=文本;
}
}
你能帮我做删除功能和ondelete级联吗。 谢谢
Vijaya Kumar

当您使用级联类型时。删除:

@OneToMany(mappedBy="module")
@Cascade(CascadeType.DELETE)
private List<Label> label;

使用
all delete orphan
,如果
标签
被持久化
模块
引用,则任何新实例化的
标签
都将成为持久化的。当
模块
被删除时,如果某个
模块
引用了任何持久的
标签
,则该标签将被删除。而且,如果使用
级联类型时从持久
模块
标签
集合中删除了任何持久
标签
,则该标签将被删除。删除

@OneToMany(mappedBy="module")
@Cascade(CascadeType.DELETE)
private List<Label> label;

使用
all delete orphan
,如果
标签
被持久化
模块
引用,则任何新实例化的
标签
都将成为持久化的。当
模块
被删除时,如果某个
模块
引用了任何持久的
标签
,则该标签将被删除。而且,如果从持久性
模块的
标签
集合中删除任何持久性
标签
,也将删除它,原因是:org.hibernate.exception.ConstraintViolationException:无法在org.hibernate.exception.sqlstatecoverter.convert(sqlstatecoverter.java:96)上执行JDBC批处理更新org.hibernate.jdbc.exception.jdbceptionhelper.convert(jdbceptionhelper.java:66)org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)org.hibernate.engine.engine.ActionQueue.executeActions(ActionQueue.java:189)原因:java.sql.BatchUpdateException:无法删除或更新父行:外键约束失败(
lportal
atflabeltext
,约束
FKA6C78EE9D4FD6A4
外键(
label\u id
)引用
atflabel
id
))位于com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1257)让我猜猜你想要实现什么。如果我错了,请纠正我。你想要创建并持久化一个带有一组
标签的
模块的实例。当你
删除
模块的持久化实例时,相关的
标签也应该与模块一起删除。如果这是你想要的t、 您需要使用
all delete orphan
。这样,您就不需要单独保存
label
。在
ModuleImpl
类中定义
addLabel
方法:
public voi