标签: cascade

@ManyToMany with cascade = CascadeType.REMOVE 删除关联和实体

我有 2 个实体:GroupGrouped,有 1 个多对多关联。

在数据库中,该Association表在Group和上都有一个 NOT NULL FK Grouped

我希望 Hibernate 在删除所有分组时删除关联但不删除组。

删除Grouped实体的代码:

@Autowired
private final GroupedRepository groupedRepository;

public void delete(Grouped groupedToRemove) {
    groupedRepository.delete(groupedToRemove);
}
Run Code Online (Sandbox Code Playgroud)

如果我设置cascade = CascadeType.ALLcascade = CascadeType.REMOVEGroup当我删除一个Grouped实体时,我的实体将被删除,而不仅仅是关联:

@ManyToMany(cascade = CascadeType.ALL, // same behavior with CascadeType.REMOVE
        mappedBy = "grouped", 
        targetEntity = Group.class)
private Set<Group> groups = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)

如果我删除级联,hibernate 会尝试设置 group_id=null 并抛出一个ModelConstraintException. 我不想将 FK 设置为可空。

集团实体: …

java many-to-many hibernate jpa cascade

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

JPA 和 Hibernate Cascade DELETE OneToMany 不起作用

我一直在阅读一篇又一篇文章,一篇又一篇文章,试图在最新的 Spring Boot 版本中使用 JPA/Hibernate 进行级联删除。我读过你必须使用 Hibernate 特定的级联,我读过你没有。我读过他们只是不工作,但它似乎是一个混合包。我试过的一切都不起作用。这种关系是双向的。

不起作用:

@Entity
public class Brand {

    @OneToMany(mappedBy = "brand", orphanRemoval = true, fetch = FetchType.LAZY)
    @Cascade({CascadeType.DELETE})
    @JsonManagedReference("brand-tax-rate")
    private List<TaxRate> taxRates;

}
Run Code Online (Sandbox Code Playgroud)

不起作用:

@Entity
public class Brand {

    @OneToMany(mappedBy = "brand", cascade = CascadeType.REMOVE, orphanRemoval = true, fetch = FetchType.LAZY)
    @JsonManagedReference("brand-tax-rate")
    private List<TaxRate> taxRates;

}
Run Code Online (Sandbox Code Playgroud)

除了删除TaxRates之前删除之外还有什么工作Brand吗?

我的测试是这样的:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {Application.class, SpringSecurityConfig.class})
@ActiveProfiles("test")
@Transactional
public class CascadeTests {

    @Autowired
    private BrandService brandService;

    @Autowired
    private TaxRateLoaderService taxRateLoaderService;

    @Autowired
    private TaxRateService …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa cascade spring-boot

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

c# - 实体框架核心级联删除一对一关系

我在服务和 Lexikon 之间有一对一的关系,而服务有 Lexikon 的外键。我的服务不需要 Lexikon,因此我将 LexikonID 设置为可为空。但我的 Lexikon 仅当与服务相关时才能存在,因此我将导航属性设置为 [必需]。我使用的是 Code First,因此 EF 构建了我的数据库。

 public class Service
 {

    public int ServiceID { get; set; }

    //Foreignkey
    public int? LexikonID { get; set; }

    //Navigation Properties

    public Lexikon Lexikon { get; set; }
 }

 public class Lexikon
 {
    public int LexikonID { get; set; }

    //Navigation Properties
    [Required]
    public SoftwareService SoftwareService { get; set; }

 }
Run Code Online (Sandbox Code Playgroud)

如果我删除我的服务,我会尝试自动删除 Lexikon 表中的数据,但不幸的是,我不知道如何执行此操作,因为我是 EF 新手。

我在 dbContext 中尝试了以下代码:

       modelBuilder.Entity<SoftwareService>()
                .HasOne(l => l.Lexikon)
                .WithOne(s => …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework cascade one-to-one entity-framework-core

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

合并主键-级联更新

有没有一种方法可以将两个主键合并为一个,然后级联更新所有受影响的关系?这是场景:

客户(idCustomer int PK,公司varchar(50)等)

CustomerContacts(idCustomerContact int PK,idCustomer int FK,名称varchar(50)等)

CustomerNotes(idCustomerNote int PK,idCustomer int FK,注释文本等)

有时,客户需要合并为一个。例如,您有一个ID为1的客户,另一个ID为2的客户。您想将两者合并,因此现在2的所有内容都为1。我知道我可以编写一个脚本来更新所有受影响的表一个,但是我想通过使用级联规则使其更适合将来使用,因此我不必在每次添加新关系时都更新脚本。

有任何想法吗?

sql sql-server cascade

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

如何在Rails ActiveRecord中的one_to_many关系中进行级联删除?

我有一个带有one_to_many关系的rails模型.当我删除父亲时,我想删除所有孩子.我该怎么办?我想在删除用户时删除所有订单及其商品

我的模特是:

class User < ActiveRecord::Base
  has_many :orders, :foreign_key => "id_user"
end

class Order < ActiveRecord::Base
  has_many :order_items, :foreign_key => "id_pedido"
  belongs_to :user, :foreign_key => "id_usuer"
end

class OrderItem < ActiveRecord::Base
  belongs_to :order, :foreign_key => "id_pedido"
end
Run Code Online (Sandbox Code Playgroud)

activerecord cascade ruby-on-rails cascading-deletes

5
推荐指数
2
解决办法
6473
查看次数

使用@OneToOne注释从表中删除

我正在使用JPA2和Hibernate实现.

我有这样的简单映射:

@Entity 
class Topic {

    @Id
    @GeneratedValue(strategy = IDENTITY)

    int id;

   @OneToOne(cascade = ALL)
   @JoinColumn(name = "id_poll")
   private Poll poll;

}

@Entity 
class Poll {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    int id;
}
Run Code Online (Sandbox Code Playgroud)

现在,当我删除一个也在Topic中的Poll对象时,我收到一个错误.

java.sql.SQLException:完整性约束违规FKCC42D924982D3F4B表:语句中的TOPICS [从民意调查中删除id =?]

我理解这是因为如果Poll记录在另一个表中有引用,我就无法删除它.我怎么解决这个问题?我是否必须在主题表中手动设置poll = null或者是否有更好的解决方案?

hibernate cascade one-to-one jpa-2.0

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

在playframework中级联删除 - 如何为实体建模

在使用时创建在线商店应用程序时play-1.2.4,我遇到了jpa的一些问题.我想使用CRUD modulein play 提供管理区域.在这里,管理员用户可以创建/编辑或删除应用程序中的实体(如Customers,Orders) ,Item等等).

A Customer可以创建Orders.Each Order将有一组CartItems .当Order删除时,CartItem必须删除相应的s .当a Customer被删除时,他的所有订单也必须被删除.我想我可以通过设置cascade属性来获得jpa注释.

我这样建模了

Customer.java

@Entity
public class Customer extends Model {
    @Email
    @Required
    public String email;
    ...
    @OneToMany(mappedBy="customer", cascade=CascadeType.ALL)
    public List<Order> orders;
    @OneToOne
    public PayMethod currentPayment;
    ...
}
Run Code Online (Sandbox Code Playgroud)

Order.java

@Entity
public class Order extends Model {  
    @OneToMany( cascade=CascadeType.ALL,orphanRemoval=true,fetch=FetchType.EAGER)
    public Set<CartItem> cartItems;

    @ManyToOne
    public Customer customer;
    @ManyToOne
    public PayMethod paymentMethod;
    ... …
Run Code Online (Sandbox Code Playgroud)

java jpa cascade playframework

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

Django中的对象级别级联权限

诸如Django-guardian和django-permissions之类的项目使您能够拥有对象级权限。但是,如果两个对象之间通过父子关系相互关联,则除非另有说明,否则子对象有什么方法可以继承父对象的许可?例如,除非用户为子文件夹明确分配了不同的权限,否则a subfolder应该继承权限parent folder

使用Django(尤其是Django-guardian模块)完成此操作的最佳方法是什么?

python django permissions cascade

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

核心数据级联删除不可靠?

每当prepareForDelete在删除原因是级联删除规则时更新模型时,NSFetchedResultsController似乎存在错误.

这似乎意味着隐式删除(通过级联删除)的行为与显式删除的行为完全不同.

这真的是一个错误,还是你能解释为什么我看到这些奇怪的结果?


设置项目

您可以跳过整个部分并下载xcodeproj.

  1. 使用Master-Detail Application模板创建一个新项目.

  2. Event实体添加新属性.(这很重要,因为我们希望能够更新属性,而不会导致NSFetchedResultsController重新排序任何项目.否则它将发送NSFetchedResultsChangeMove事件而不是NSFetchedResultsChangeUpdate事件).

  3. 调用属性hasMovedUp,然后将其设为a Boolean.(注意:创建这样的属性可能看起来很愚蠢,但这只是一个例子,我试图将其减少到重现此bug所需的最小步骤数.)

  4. 添加一个新实体,调用它EventParent.

  5. 创建与Event的关系,调用它child.做出反向关系,称之为parent.(注意:这是1:1的关系.)

  6. 单击EventParent.单击其子关系.将其删除规则设置为级联.我们的想法是,我们只会删除父对象.删除父项后,它将自动删除其子项.

  7. 将事件的父关系"删除规则" 保留Nullify.

  8. 通过Xcode为两个实体创建NSManagedObject子类.

  9. insertNewObject:创建新事件的方法中,确保创建相应的父级.

  10. Event.m文件中,自动分配的最后一个事件的hasMovedUpYES通过声明一个prepareForDeletion事件:

    NSLog(@"Prepare for deletion");
    
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Event"];
    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"timeStamp" ascending:NO];
    [fetchRequest setSortDescriptors:@[sortDescriptor]];
    NSArray *results …
    Run Code Online (Sandbox Code Playgroud)

cascade core-data nsfetchedresultscontroller

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

实体框架迁移忽略WillCascadeOnDelete

以这个问题为例. 实体框架(EF)代码优先级联删除一对一或零关系

我有一个正常的背景等.

如果我改变任何东西,我可以生成一个新的迁移Add-Migration test.

但是,如果我将WillCascadeOnDelete()从true更改为false或添加一些true,它将被实体框架忽略.

我首先使用Code从数据库生成模型.在生成的模型中,一切都已开启WillCascadeOnDelete(false).所以现在我将它从false变为true,但被实体框架忽略了.

我试过这个:http://msdn.microsoft.com/en-us/data/jj591620.aspx#CascadeDelete.

添加这些行后...如果我添加没有任何变化Add-Migration newTest.

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>()
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>()
Run Code Online (Sandbox Code Playgroud)

这也被忽略了Add-Migration thirdTest.

modelBuilder.Conventions.Add<OneToManyCascadeDeleteConvention>()
modelBuilder.Conventions.Add<ManyToManyCascadeDeleteConvention>()
Run Code Online (Sandbox Code Playgroud)

我可以用WillCascadeOnDelete改变一切......它被忽略了!

如果我更改了其他所有内容,它会起作用,并会附加到新的迁移中...

此构造的主要类如下.

[Table("SomeToThing")]
public class SomeToThing : Base
{
    [Column("Some")]
    public Guid SomeId { get; set; }
    [ForeignKey("SomeId")]
    public virtual Some Some { get; set; }

    [Column("Thing")]
    public Guid ThingId { get; set; }
    [ForeignKey("ThingId")]
    public virtual Thing Thing { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有这个表:

  • 一些
  • SomeToThing
  • 事情

SomeToThing有更多的变量,因为我不能映射 …

c# entity-framework cascade

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