我有3个表:lt_hdefaults,lt_hperiods和lt_hrules.在lt_hdefaults,特定年份的房产有一行.在lt_hperiods表中,可能有不止一个时期,称他们为季节.在lt_hrules表格中,每个时期可能有多个规则.现在,我无法工作:当用户删除记录时lt_hdefaults,应删除与删除记录相关的其他数据lt_hperiods和lt_hrules表.我试图通过使用来实现这一目标
FOREIGN KEY (lt_year,lt_id) REFERENCES lt_hdefaults(lt_year,lt_id) ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用.我知道它看起来很长但不是很复杂.如果有人有任何想法,我将不胜感激.我知道如何使用mysql,但我不是专家.非常感谢.
以下样本:
CREATE TABLE IF NOT EXISTS lt_hdefaults (
lt_year year(4) NOT NULL DEFAULT '0000',
lt_id int(255) NOT NULL DEFAULT '0',
period_name varchar(45) NOT NULL DEFAULT 'Default',
min_stay int(10) NOT NULL DEFAULT '1',
max_stay int(10) NOT NULL,
weekly_rate float(10,2) NOT NULL,
nightly_rate float(10,2) NOT NULL,
PRIMARY KEY (lt_year,lt_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE …Run Code Online (Sandbox Code Playgroud) 我想弄清楚级联删除是如何工作的.我知道一般概念,但不知道它的细节.
我有3个表(a)|| --- | <(B)> o --- ||(C)
表A:
Aid
Tag
Run Code Online (Sandbox Code Playgroud)
表B:
Aid (f)
Cid (F)
Run Code Online (Sandbox Code Playgroud)
表C:
Cid
Other
Run Code Online (Sandbox Code Playgroud)
如果我将表B [Aid]设置为删除级联,它会:
我在Item和Category之间有@ManyToMany(双向)关系.
class Item {
@ManyToMany(cascade = CascadeType.ALL)
Collection<Category> categories=new ArrayList<Category>();
}
class Category {
@ManyToMany(mappedBy="categories", cascade = CascadeType.ALL)
Collection<Item> items=new ArrayList<Item>();
}
Run Code Online (Sandbox Code Playgroud)
我在两者上都指定了CascadeType.ALL.物品是物主.将使用第三个表(Item_Category)映射ManyToMany关系
当我创建一个项目并向该项目添加类别并保存该项目时,该项目中的所有类别都会保持不变.此外,还在连接表中生成必要的条目(如预期的那样).
但是,当我创建一个类别并向其添加新项目并保存该类别时,我看到必须在项目和类别表中创建条目,但在Item_Category连接表中没有插入.因此,无法正确创建关联.
这是预期的行为吗?这意味着只有当我们在Item中添加类别时,关联表才会有条目,因为Item是关系的所有者?
我有一个在extjs 4.x中生成的树,我需要计算任何节点,即该节点的叶子数.我的意思是叶子的总数,这也意味着该节点的"子节点"的叶子.我看到有一种级联方法,但我无法使用它.
我正在寻求帮助,因为当我尝试删除具有OneToMany关系的实体时,我在使用List加载页面时遇到此错误:
MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败
当然我知道它与Cascade删除孩子有关,但我不知道我做错了.
相对于与儿童的关系的父实体部分:
@Entity
@Table(name="PARENT")
public class Parent implements Serializable {
...
@OneToMany (mappedBy = "parent", orphanRemoval = true, cascade={CascadeType.ALL}, targetEntity = Children.class)
@JoinColumn(name = "parent_id")
private List <Children> children;
...
}
Run Code Online (Sandbox Code Playgroud)
子实体部分相对于与父母的关系:
@Entity
@Table(name = "CHILDREN")
public class Children implements Serializable {
...
@ManyToOne(targetEntity = Parent.class, cascade = CascadeType.ALL)
@JoinColumn
private Country country;
Run Code Online (Sandbox Code Playgroud)
JSF按钮删除实体:
<p:button onmouseup="#{parentBean.remove(parent)}" value="Delete" />
Run Code Online (Sandbox Code Playgroud)
豆:
getEntityManager().remove(getEntityManager().merge(parent));
Run Code Online (Sandbox Code Playgroud)
例外:
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or …Run Code Online (Sandbox Code Playgroud) 我有以下问题:当我尝试删除具有以下关系的实体时:
@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按照我尝试的方式使用自定义方法?
我正在尝试使用ON DELETE CASCADE我正在处理的数据库.似乎没有工作,所以我在一个简单的例子上测试了它没有成功.
CREATE TABLE foo (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
data VARCHAR(10),
PRIMARY KEY (id)
)ENGINE=InnoDB;
CREATE TABLE foo2 (
id INT UNSIGNED NOT NULL,
data2 VARCHAR(10),
PRIMARY KEY (id),
CONSTRAINT fk_foo2_id FOREIGN KEY (id) REFERENCES foo(id) ON DELETE CASCADE
)ENGINE=InnoDB;
INSERT INTO foo (data) VALUE ('hello'),('world'),('mysql');
INSERT INTO foo2 (data2) VALUE ('hello2'),('world2'),('mysql2');
SELECT * FROM foo;
+----+-------+
| id | data |
+----+-------+
| 1 | hello |
| 2 | world |
| …Run Code Online (Sandbox Code Playgroud) 我有一个场景,其中策略和县实体表之间有一个多对多映射。这是实体代码-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) 我正在为 Blackberry 10 开发一个应用程序,当我尝试从 QStringList 获取元素 2 而该列表仅包含 1 个元素时,我的应用程序崩溃了。
我正在使用以下代码来捕获此类错误:
try {
//a code that accesses QStringList with an index out of bounds
}
catch (Exception e) {
}
Run Code Online (Sandbox Code Playgroud)
但异常没有被捕获,应用程序总是崩溃。
我尝试了 catch (std:exception& e) 和 catch(...) 也没有工作。
如何使用 try catch 捕获此错误?
我正在进行春季项目,在某些模型课中有类型
Cascade = {CascadeType.ALL}
用参数编写,例如:
@ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL)@JoinColumn(name =“ USER_ID”,nullable = false)
私人用户用户;
我的问题是,我们应该将其用于什么目的?
谢谢你。