我有以下问题:当我尝试删除具有以下关系的实体时:
@OneToMany(mappedBy="pricingScheme", cascade=CascadeType.ALL, orphanRemoval=true)
private Collection<ChargeableElement> chargeableElements;
Run Code Online (Sandbox Code Playgroud)
与CrudRepository通过提供删除方法它消除其所有的充电元件,其是精细沿着实体。当我尝试使用自定义删除时出现问题:
@Modifying
@Query("DELETE FROM PricingScheme p WHERE p.listkeyId = :listkeyId")
void deleteByListkeyId(@Param("listkeyId") Integer listkeyId);
Run Code Online (Sandbox Code Playgroud)
它说:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
Cannot delete or update a parent row: a foreign key constraint fails
(`listkey`.`chargeableelements`, CONSTRAINT `FK_pox231t1sfhadv3vy7ahsc1wt`
FOREIGN KEY (`pricingScheme_id`) REFERENCES `pricingschemes` (`id`))
Run Code Online (Sandbox Code Playgroud)
为什么不允许我这样做?难道@Query方法不支持级联特性?我知道我可以findByListkeyId(…)先使用标准的delete方法删除持久性实体,但这是不雅致的。是否可以@Query按照我尝试的方式使用自定义方法?
这是我的第一个实体。
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String firstName;
private String lastName;
// Removed other stuff for brevity
}
Run Code Online (Sandbox Code Playgroud)
这是我的第二个实体
@Entity
@Table(name = "membership")
public class Membership {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String membershipType;
// Help here, I need another column called person_id which is what will correspond
// to persons or person rows from person table
}
Run Code Online (Sandbox Code Playgroud)
本质上,在person表中我们将有n人员(n行)。在membership …
在我的 Laravel 应用程序中,我有一张名为“研究”的表,另一个名为“论文”的表。它们具有一对多的关系,其中每个研究可以有一篇或多篇论文。在论文迁移文件中,我使用以下命令创建了外键约束:
//foreign key for the research model
$table->unsignedBigInteger('research_id');
$table->index('researach_id');
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个新的迁移来添加级联 onDelete,以便在删除其父研究时删除论文。我该怎么做?我正在使用 Laravel 5.1
编辑
所以答案与接受的答案非常相似,只是我必须先删除该列,然后添加外键。因为我还没有进入生产环境,所以删除列不是问题,但如果您处于生产环境中,您最终可能会弄乱数据库中数据的一致性。所以要小心
我有一个场景,其中策略和县实体表之间有一个多对多映射。这是实体代码-InsurancePolicy.java-
@Entity
@Table(name = "insurance_policy")
public class InsurancePolicy {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="policy_id")
private long policyId;
@Column(name="policy_name",nullable = false,unique = true)
private String policyName;
//Short description
@Column(name="policy_description",nullable = false)
private String policyDescription;
//Long description
@Column(name="choose_description",nullable = false)
private String chooseDescription;
//many policies can belong to one category
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "company_id", nullable = false)
private Company company;
//many policies can belong to one category
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="category_id",nullable=false)
private Category category;
@ManyToMany(mappedBy …Run Code Online (Sandbox Code Playgroud) 我想知道在InnoDB中定义关系时代表CASCADE的是什么?
我看到它与动作有关:ON DELETE&ON UPDATE.
我是否必须在表格中的每个关系上将其设置为CASCADE?
mysql innodb database-relations cascading-deletes sql-delete
假设我在表中有一行AI希望删除但在其他表中有多个外键约束.有没有办法自动生成删除命令?我认为一个工具可以递归地查看外键,然后生成一个删除语句来处理所有外键应该存在,但我找不到一个.
我在MSSql server2008上
cascade ×2
jpa ×2
sql-delete ×2
foreign-keys ×1
hibernate ×1
innodb ×1
java ×1
jpql ×1
laravel ×1
migration ×1
mysql ×1
one-to-many ×1
spring-boot ×1
sql ×1
sql-server ×1