标签: cascade

JPA 中的级联设置和休眠中的外键违规

我有两门课:

  1. 家长
  2. 孩子

数据库中的Child表有一列ParentId -> 典型的One(Parent)-> Many(Children)关系

现在我创建两个实体,它们

public class Parent
{
    @OneToMany(mappedBy="Parent", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    public Set<Child> getChildern()
    {
      ...
    }
}

public class Child
{
   @ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
   @JoinColumn(name="ParentId")
   public Parent getParent()
   { ... }
}
Run Code Online (Sandbox Code Playgroud)

现在我有两种情况:

  1. 父级被删除 -> 会发生什么?
  2. 子项被删除 -> 会发生什么?

奖励问题:

  1. 我是否总是需要创建密钥 OneToMany 和 ManyToOne 的两个部分,或者我可以只拥有 ManyToOne 并且不关心我有孩子的父级?
  2. 什么会导致休眠给我一条没有孩子的父母违反外键约束的消息?

java entities hibernate jpa cascade

2
推荐指数
1
解决办法
9294
查看次数

SQL,On删除级联和更新级联

我是SQL新手,遇到了一个奇怪的问题.所以我有两张桌子OFFERS和SUPPLIER.这是供应商表.

CREATE TABLE  "SUPPLIER" 
   (    "S#" NUMBER, 
    "NAME" VARCHAR2(50),  
    "CITY" VARCHAR2(50), 
     PRIMARY KEY ("S#") ENABLE
   )
Run Code Online (Sandbox Code Playgroud)

这是OFFERS表.

CREATE TABLE  "OFFERS" 
   (    "P#" NUMBER, 
    "S#" NUMBER, 
    "V#" NUMBER, 
    "PR#" NUMBER, 
      CONSTRAINT "PK_OFFERS" PRIMARY KEY ("P#") ENABLE
   )
Run Code Online (Sandbox Code Playgroud)

所以现在,当我尝试像这样添加一个外键约束到商品表

ALTER TABLE OFFERS
ADD CONSTRAINT FK_SUPPLIERS FOREIGN KEY(S#)
 REFERENCES SUPPLIER (S#) 
ON DELETE CASCADE
ON UPDATE CASCADE
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:"ORA-01735:ALTER TABLE选项无效".如果我删除最后一行,这是"ON UPDATE CASCADE",这完全正常.那么,我做错了什么?我在互联网上看过很多像这样的例子,应该有用,所以我有点困惑.我正在研究apex.oracle.com,如果这有任何区别的话.

sql oracle cascade

2
推荐指数
1
解决办法
2万
查看次数

Hibernate:删除父级/所有者,同时保持子级一对一的关系

我有两个实体类:UserConfirmation 和 User,它们是一对一的关系,使用以下带注释的代码:

父/所有者实体(用户确认):

@OneToOne(mappedBy = "userConfirmation", cascade = CascadeType.ALL)
    @JsonManagedReference
    private User user;
Run Code Online (Sandbox Code Playgroud)

子实体(用户):

@OneToOne
@JoinColumn(name = "user_confirm_id")
@JsonBackReference
private UserConfirmation userConfirmation;
Run Code Online (Sandbox Code Playgroud)

在当前情况下Cascade.ALL,当我删除 UserConfirmation 时,其关联的 User 也会被删除,这是我不希望的。我想在删除用户确认后保留用户。

我尝试过以下方法:

  1. 在删除 UserConfirmation 之前将用户设置为 null:userConfirmation.setUser(null);但这会产生 NullPointerException

  2. 尝试了 Cascade.REMOVE 和 Cascade 上的几乎所有内容,但没有一个有效。

一如既往地感谢您的帮助:)

java hibernate jpa cascade hibernate-mapping

2
推荐指数
1
解决办法
3959
查看次数

删除外键时的 CASCADE 行为

我不清楚当删除指定选项 CASCADE 的“外键约束”时会发生什么。

例如,考虑这个命令

ALTER TABLE table1 DROP CONSTRAINT foreignKeyToTable2 CASCADE.
Run Code Online (Sandbox Code Playgroud)

在这种情况下,选项 CASCADE 应该做什么?如果我省略它会发生什么?如果我写 RESTRICT 而不是 CASCADE 呢?

注意:此查询示例摘自“Ramez Elmasri,Shamkant B. Navathe - 数据库系统基础知识,第 5 章末尾”。

sql cascade foreign-keys alter-table

2
推荐指数
1
解决办法
2713
查看次数

SQL ON DELTE CASCADE 不起作用

我目前正在使用 Oracle SQL Developer 编写数据库,我想对我的外键使用 ON DELETE CASCADE,但它显然不起作用。以下是有关声明。您可能会注意到没有更多的表,只有这两个用于测试。

CREATE TABLE pizza
(   size NUMBER(3),
    price NUMBER(5,2),
    CONSTRAINT pk_pizza PRIMARY KEY (size, price)
);
CREATE TABLE pizzacondiment 
(   condiment VARCHAR(30),
    pizzasize NUMBER(3),
    pizzaprice NUMBER(5,2),
    CONSTRAINT pk_condiments PRIMARY KEY (condiment, pizzasize, pizzaprice)
    CONSTRAINT fk_condiments_pizza FOREIGN KEY (pizzasize, pizzaprice)
    REFERENCES pizza (size, price)
    ON DELETE CASCADE;
);
Run Code Online (Sandbox Code Playgroud)

现在,当我想放下桌上披萨时,输出说:

CREATE TABLE pizza
(   size NUMBER(3),
    price NUMBER(5,2),
    CONSTRAINT pk_pizza PRIMARY KEY (size, price)
);
CREATE TABLE pizzacondiment 
(   condiment VARCHAR(30),
    pizzasize NUMBER(3),
    pizzaprice NUMBER(5,2), …
Run Code Online (Sandbox Code Playgroud)

sql oracle ddl cascade foreign-keys

2
推荐指数
1
解决办法
2045
查看次数

关于 DELETE CASCADE 在雪花中不起作用

我有两张桌子:

CREATE TABLE category(
    id INTEGER NOT NULL DEFAULT CATEGORY_SEQUENCE.NEXTVAL,
    name VARCHAR(50),
    PRIMARY KEY(id)
);

CREATE TABLE product(
    id INTEGER NOT NULL DEFAULT PRODUCT_SEQUENCE.NEXTVAL,
    name VARCHAR(50),
    id_category INTEGER REFERENCES category(id) ON DELETE CASCADE ON UPDATE CASCADE,
    PRIMARY KEY(id)
);
Run Code Online (Sandbox Code Playgroud)

当我 时DELETE FROM category,产品不会被删除。

我究竟做错了什么?

ddl cascade snowflake-cloud-data-platform

2
推荐指数
1
解决办法
1146
查看次数

TSQL:获取受级联删除影响的所有表

我正在寻找一个 SQL 脚本,该脚本将列出从表 X 中删除记录时将受到影响的所有表。它还应该列出“树”下受影响的依赖表,因为受影响的表将对其他表进行级联删除,这反过来又会影响其他人等等。

t-sql cascade

2
推荐指数
1
解决办法
972
查看次数

调试 PostgreSQL 触发性能

我有一个缓慢的删除查询。我曾经EXPLAIN ANALYZE了解瓶颈,我看到两个触发器很慢:

Trigger for constraint other_table_1_fid_fkey: time=3.644 calls=1
Trigger for constraint other_table_2_fid_fkey: time=6.289 calls=1
Run Code Online (Sandbox Code Playgroud)

在这次讨论之后,我添加了索引。索引fid确实other_table_1提高了性能。fid但是在in上添加索引并other_table_2没有任何区别,而且它似乎是delete查询中的瓶颈。

我的问题是如何调试(或EXPLAIN ANALYZE)触发器本身。

谢谢,

PS 为了解决我的具体问题,我暂时删除了外键约束,它提高了性能。

postgresql cascade query-optimization

2
推荐指数
1
解决办法
516
查看次数

sql删除级联不起作用

我有一个带有2个表的Microsoft SQL数据库:dog和cat.

"dog"表有一个名为"food"的主键列,它与"cat"表中的一个名为"food"的列有关,该表用作外键.

表之间的关系有一个"on delete cascade"规则集,所以当我从"dog"表中删除一行时,"cat"表中的relveant行也应该被删除.

但是"cat"表中的行会被net删除,它们会保留.我使用Microsoft SQL数据库管理器删除"dog"表中的行.

知道为什么会这样吗?我是否需要使用特殊的delete sql命令以这种方式删除行?

//编辑

表的脚本是:

USE [VELES]
GO
/****** Object:  Table [dbo].[Periods]    Script Date: 01/18/2011 14:52:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Periods](
    [PeriodID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    [PeriodName] [nvarchar](50) COLLATE Hebrew_CS_AS NULL,
    [PeriodStartDate] [smalldatetime] NOT NULL,
    [PeriodEndDate] [smalldatetime] NOT NULL,
 CONSTRAINT [PK_Periods] PRIMARY KEY CLUSTERED 
(
    [PeriodID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]


USE [VELES]
GO
/****** Object:  Table [dbo].[Exams] …
Run Code Online (Sandbox Code Playgroud)

sql sql-server cascade cascading-deletes

1
推荐指数
1
解决办法
1万
查看次数

t-sql查询填充空值

我是sql server 2012的新手,想了解如何使用t-sql创建以下输出.有很多俱乐部号码所以必须有一个循环或光标.请帮忙!!

club_number  name                                             number
---------- -------------------------------------------------- -----------
355292     NULL                                               NULL
NULL       Giviton Mbunge                                     355308
NULL       Etero Aaron                                        355317
NULL       Evason Banda                                       355326
NULL       Kachibobo Batoni                                   355335
NULL       Kashamba Nkhani                                    355344
355353     NULL                                               NULL
NULL       Daniel Banda                                       355362
NULL       James Aaron                                        355371
NULL       Amson Kamanga                                      355380
NULL       Gostino George                                     355399
355405     NULL                                               NULL
NULL       Yohane Zimba                                       355414
NULL       Haward M.Chilembwe                                 355423
NULL       Zikiele Blangete                                   355432
355441     NULL                                               NULL
Run Code Online (Sandbox Code Playgroud)

结果:我想看看上面的TABLE如下,哪个查询可以做到?请帮忙

club_number  name                                             number
---------- -------------------------------------------------- -----------
355292       NULL                                               NULL …
Run Code Online (Sandbox Code Playgroud)

t-sql cascade sql-server-2012

1
推荐指数
1
解决办法
559
查看次数