标签: cascade

删除一对一关系的规则

我有2个实体:Department <---->> Employee.因此,该部门与员工有一对多的关系,员工与部门有一对一的关系.

什么应该是一对一关系的删除规则?如果我选择级联,我可以看到删除员工时删除了部门,当然我不希望这样.我认为删除规则的逻辑选项是"无操作",但后来我收到警告.我错过了什么,或者在这种情况下删除规则是否真的是"无行动"?

cascade core-data rule

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

JPA实体关系:级联删除

我使用spring,JPA和Hibernate.

我有以下实体:

@Entity
@Table(name = "Supplier")
public class Supplier {

   @Id
   @Column(name = "Supplier_ID", nullable = false)
   private Integer supplierId;

   ...
}
Run Code Online (Sandbox Code Playgroud)

和,

@Entity
@Table(name = "Product")
public class Product {

   @Id
   private Integer productId;

   @ManyToOne(cascade = CascadeType.ALL)
   @OnDelete(action = OnDeleteAction.CASCADE)
   @JoinColumn(name = "Supplier_ID")
   private Supplier supplier;

   ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,给定的架构

  1. 当我从孩子(即产品)中删除一行时,供应商是否也会被删除?
  2. 或者,只有当父(即供应商)被删除时,它才会被级联以删除所有子项'产品'

谢谢.

hibernate jpa cascade

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

Oracle确定删除是否会级联

我正在开发一个遗留的oracle数据库系统(10g),我没有详细的架构信息.我需要找出删除表中的特定记录是否会导致其他表中的级联删除.我检查了触发器.但是,由于参考约束,我不确定级联.有没有一种简单的方法来识别这个?

oracle cascade

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

即使我有"删除级联",获取"外键约束失败"

我认为ON DELETE CASCADE的意思是这不会发生.:\我有以下表格:

CREATE TABLE Tweets (
    tweetID INTEGER                 NOT NULL AUTO_INCREMENT,
    userID INTEGER                  NOT NULL,
    content VARCHAR(140)            NOT NULL,
    dateTime TIMESTAMP              NOT NULL DEFAULT CURRENT_TIMESTAMP,
    hasPoll INTEGER                 NOT NULL,
    visible INTEGER                 NOT NULL DEFAULT 1,
    PRIMARY KEY (tweetID),
    FOREIGN KEY (userID) REFERENCES Users(userID)
    ON DELETE CASCADE
);

CREATE TABLE Polls (
    pollID INTEGER NOT NULL AUTO_INCREMENT,
    tweetID INTEGER NOT NULL,
    pollOptionText VARCHAR(300),
    PRIMARY KEY (pollID),
    FOREIGN KEY (tweetID) REFERENCES Tweets(tweetID)
);
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试删除附加了Poll的推文时,我收到以下错误(通过Flask):

_mysql_exceptions.IntegrityError
IntegrityError: (1451, 'Cannot delete or update …
Run Code Online (Sandbox Code Playgroud)

mysql sql cascade foreign-keys

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

关于删除级联的Django没有在PostgreSQL中产生正确的约束

在Django,我有一个模型:

class HmmInsectValue(models.Model):
    hmm = models.ForeignKey('HmmResult', on_delete=models.CASCADE)
    ...
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL数据库(9.3.2)上,这会产生一个约束:

FOREIGN KEY (hmm_id) REFERENCES devdash_hmmresult(id) DEFERRABLE INITIALLY DEFERRED
Run Code Online (Sandbox Code Playgroud)

而我真正想要的是:

FOREIGN KEY (hmm_id) REFERENCES devdash_hmmresult(id) ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)

这会破坏我的代码,因为当我尝试删除一个HmmResult条目时,它会抱怨它仍然被引用HmmInsectValue.如果我用上面的线手动替换它一切正常.

知道为什么会这样吗?

python django postgresql cascade foreign-keys

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

JPA。级联合并上的 Stackoverflow

这是我的 JPA 结构:

电影(看看级联类型):

@Entity
@Table(name = "movie")
public class Movie {

    @Id
    @Column(name = "movie_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    //@OneToMany(cascade = CascadeType.ALL, mappedBy = "primaryKey.movie") //stack overflow
    @OneToMany(mappedBy = "primaryKey.movie") //works fine
    private List<Rating> ratings;
    ....
}
Run Code Online (Sandbox Code Playgroud)

评分:

@Entity
@Table(name = "rating")
@AssociationOverrides({@AssociationOverride(name = "primaryKey.movie", joinColumns = @JoinColumn(name = "movie_id")),
        @AssociationOverride(name = "primaryKey.user", joinColumns = @JoinColumn(name = "imdb_user_id"))})
public class Rating {
    @EmbeddedId
    private RatingId primaryKey = new RatingId();

    @Column(name = "rating_value")
    private Integer ratingValue;
    .....
} …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow hibernate jpa cascade

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

如何使用 GORM (Go) 处理级联操作

我正在测试 Go 的 GORM 库。我发现这个库特别有用,并且我一步一步地处理越来越复杂的概念。

我面临着级联运营管理的问题。

在某些问题上,创建者建议使用 AfterDelete。问题是:在 After/BeforeDelete 函数中,不存在嵌套项。

每个人都有实现这个的好方法吗?

这是我的代码(如果有人发现 Gorm 几乎可以工作):

package main

import (
    "time"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
    "fmt"
    "github.com/satori/go.uuid"
)

type Company struct {
    ID        string     `gorm:"primary_key;column:ID"`
    Name      string     `sql:"size:255;unique;index" gorm:"column:Name"`
    Employees []Employee // one-to-many relationship
    Address   Address    // one-to-one relationship
}

func (u Company) TableName() string {
    return "Company"
}
func (u Company) String() string {
    return fmt.Sprintf("ID: %s | Name: %s | Employees: %v | Address: %v ", u.ID, u.Name, u.Employees, u.Address)
} …
Run Code Online (Sandbox Code Playgroud)

cascade operation go go-gorm

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

Jpa 几个@ManyToOne 与级联

我有三个实体,Session、Order 和 User(我的在线电影票项目的一部分)。在我的域模型中,Order 保留了 User 和 Session 的 fk。正如你在我的代码中看到的:


@Table(name="Orders")
@Entity

public class Order {
    @ManyToOne
    @JoinColumn(nullable = false)
    private User user;

    @ManyToOne
    private Session session;
    ...
}



@Entity 
@Table(name="Session")

public class Session {
    @OneToMany(fetch=FetchType.LAZY,
               cascade = CascadeType.ALL,
               mappedBy = "session")
    private List<Order> orders = new ArrayList<Order>();
    ...
}



@Table(name="User")
@Entity

public class User {
    @OneToMany(cascade = {  CascadeType.PERSIST,
                            CascadeType.MERGE,
                            CascadeType.REMOVE },
               mappedBy = "user")
    private @Getter Set<Order> orders = new HashSet<>();
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我可以CascadeType.ALL在 Session 和 User …

java spring hibernate jpa cascade

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

如何使用spring-boot和JPA持久化包含另一个未持久实体的多个相同实例的新实体?

概述:

我正在构建一个spring-boot应用程序,该应用程序的一部分是从外部REST服务检索一些实体,并将其与数据库中本地保存的实体的先前版本进行比较。

我注射EntityManager@PersistenceContext,并用它来工作与数据库,因为有许多实体类型,类型最初是未知的模块。我可以JpaRepository从工厂获得,但是不同实体类型的数量容易增加,如果可能的话,我宁愿不依赖它。

问题:

当模块检索它不在数据库中的实体时,它将执行一些业务逻辑,然后尝试保留新实体。

Person班,这是有问题的实体之一,包含类型的三个领域Site,这往往持有相同的对象。

当我尝试使用持久保存一个在多个字段中具有Person相同Site对象的新对象时CascadeType.PERSIST,我得到了一个EntityExistsException(请参阅stacktrace(1))。

当我从Site字段中删除CascadeType.PERSIST 并尝试在多个字段中保留Person具有相同Site对象的新对象时,我得到了TransientPropertyValueException(请参见stacktrace(2))。

我想我了解两种例外情况发生的原因:

  • 在第一种情况下,是因为在第一个站点字段被级联持久化之后,它无法在第二个字段中重新持久化。

  • 我认为的第二种情况是因为@Transactional注释正在尝试在不持久化站点实例的情况下刷新事务。

我尝试删除@Transactional注释并自己开始并提交EntityTransaction,但我得到了一个IllegalStateException(请参阅stacktrace(3)),尽管我认为这是可以预期的,因为spring应该自己处理事务本身。

我已经看过类似问题的答案(例如thisthis),但都提出了更改CascadeType的一些变体。

在另一个问题中,有人建议确保该equals()方法正确评估了有问题的实体,因此我在调试器中签入并((Person)newEntity).currentSite.equals(((Person)newEntity).homeSite)评估为true。

如何在多个字段中一致地持久保存/合并具有相同对象的实体?


编辑:我也尝试了级联类型与的各种组合fetch = FetchType.EAGER,但这不会改变它们各自的异常。


编辑2:我尝试使用a JpaRepository而不是使用EntityManager,并且根据我使用的层叠类型有效地获得了相同的异常集。

如果我使用PERSIST,但没有MERGE,我得到一个EntityNotFoundException(见堆栈跟踪(4)),如果我同时使用PERSISTMERGE我得到一个InvalidDataAccessApiUsageException`(见堆栈跟踪(5))。


人: …

java jpa cascade entitymanager persist

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

TypeORM级联选项:级联,onDelete,onUpdate

TypeORM中的级联选项是否重叠或它们的用途完全不同?在文档中对它们的描述非常稀缺,部分缺失,或者我找不到。

IOW,请执行以下选择

{ cascade: "update" } = { onUpdate: 'CASCADE' }

{ cascade: "remove" } = { onDelete: 'CASCADE' }

有同样的效果吗?

cascade选择只为TypeORM使用,而onUpdateonDelete只为DB模式(由移民创建的)?

cascade typeorm

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