我有 2 个实体:Group和Grouped,有 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.ALL或cascade = CascadeType.REMOVE,Group当我删除一个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 设置为可空。
集团实体: …
我一直在阅读一篇又一篇文章,一篇又一篇文章,试图在最新的 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) 我在服务和 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
有没有一种方法可以将两个主键合并为一个,然后级联更新所有受影响的关系?这是场景:
客户(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。我知道我可以编写一个脚本来更新所有受影响的表一个,但是我想通过使用级联规则使其更适合将来使用,因此我不必在每次添加新关系时都更新脚本。
有任何想法吗?
我有一个带有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) 我正在使用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或者是否有更好的解决方案?
在使用时创建在线商店应用程序时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) 诸如Django-guardian和django-permissions之类的项目使您能够拥有对象级权限。但是,如果两个对象之间通过父子关系相互关联,则除非另有说明,否则子对象有什么方法可以继承父对象的许可?例如,除非用户为子文件夹明确分配了不同的权限,否则a subfolder应该继承权限parent folder。
使用Django(尤其是Django-guardian模块)完成此操作的最佳方法是什么?
每当prepareForDelete在删除原因是级联删除规则时更新模型时,NSFetchedResultsController似乎存在错误.
这似乎意味着隐式删除(通过级联删除)的行为与显式删除的行为完全不同.
这真的是一个错误,还是你能解释为什么我看到这些奇怪的结果?
您可以跳过整个部分并下载xcodeproj.
使用Master-Detail Application模板创建一个新项目.
向Event实体添加新属性.(这很重要,因为我们希望能够更新属性,而不会导致NSFetchedResultsController重新排序任何项目.否则它将发送NSFetchedResultsChangeMove事件而不是NSFetchedResultsChangeUpdate事件).
调用属性hasMovedUp,然后将其设为a Boolean.(注意:创建这样的属性可能看起来很愚蠢,但这只是一个例子,我试图将其减少到重现此bug所需的最小步骤数.)
添加一个新实体,调用它EventParent.
创建与Event的关系,调用它child.做出反向关系,称之为parent.(注意:这是1:1的关系.)
单击EventParent.单击其子关系.将其删除规则设置为级联.我们的想法是,我们只会删除父对象.删除父项后,它将自动删除其子项.
将事件的父关系"删除规则" 保留为Nullify.
通过Xcode为两个实体创建NSManagedObject子类.
在insertNewObject:创建新事件的方法中,确保创建相应的父级.
在Event.m文件中,自动分配的最后一个事件的hasMovedUp是YES通过声明一个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)以这个问题为例. 实体框架(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有更多的变量,因为我不能映射 …
cascade ×10
hibernate ×3
jpa ×3
c# ×2
java ×2
one-to-one ×2
activerecord ×1
core-data ×1
django ×1
jpa-2.0 ×1
many-to-many ×1
permissions ×1
python ×1
spring ×1
spring-boot ×1
sql ×1
sql-server ×1