我有一个表定义如下:
@实体
@桌子
@Inheritance(策略=InheritanceType.JOINED)
公共类表实现可序列化{
@ID
@GenerateValue
私人长ID;
...
}
然后我有一个继承表:
@实体
@桌子
公共类子表扩展表{
...
}
Hibernate 在我的 Postgres 数据库中正确创建了两个表,但它将两个表之间的删除操作定义为“无操作”。
我如何在 Hibernate 中定义我希望在删除时定义 CASCADE 操作?例如,当我手动从表Table 中删除一行时,我想自动获取表SubTable中要删除的相应行。当我现在尝试从表中删除一行时,它返回外键约束冲突错误。
所以,我得到:
错误代码:1451。无法删除或更新父行:外键约束失败(
playground.Person、CONSTRAINTsk_Person_ParentFOREIGN KEY (parent_id) REFERENCESPerson(id) ON DELETE CASCADE ON UPDATE CASCADE)
这是一个简单的表格,引用自身:
CREATE TABLE IF NOT EXISTS Person (
id int not null primary key,
name varchar(100) not null,
parent_id int null,
CONSTRAINT `sk_Person_Parent`
FOREIGN KEY (parent_id)
REFERENCES Person (id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Run Code Online (Sandbox Code Playgroud)
如您所见,有“ON UPDATE CASCADE”。我在其中插入 4 个简单的行:
INSERT INTO Person(id, name, parent_id)
VALUES
(1, 'vasko', NULL),
(2, 'asdas', 1),
(3, 'ivo', 1),
(4, …Run Code Online (Sandbox Code Playgroud) 我在我的模型中定义了以下内容:
class TaskLink(models.Model):
task = model.ForeignKey(Task)
link_choices = (
models.Q(app_label="accounts", model="location"),
# Other models are also linked to here.
)
linked_content_type = \
models.ForeignKey(
ContentType,
limit_choices_to=link_choices
)
linked_object_id = models.PositiveIntegerField()
linked_object = \
generic.GenericForeignKey(
'linked_object_content_type',
'linked_object_id'
)
Run Code Online (Sandbox Code Playgroud)
该模型将Task对象与元组中的任何模型链接起来link_choices。在本例中,该accounts.Location模型在此列表中。
当删除一个Location对象导致相关对象的级联删除时,我的问题就出现了TaskLink。删除失败并出现以下错误消息:
django.core.exceptions.FieldError: Cannot resolve keyword 'object_id' into field. Choices are: id, linked_object, linked_object_content_type, linked_object_content_type_id, linked_object_id, task, task_id
Run Code Online (Sandbox Code Playgroud)
视图是django.views.generic.DeleteView仅包含pk_url_kwarg参数和模型集的实例(以及添加到调度方法中的权限装饰器);TaskLink在我将模型添加到混合中之前,它可以正常工作 linked_object_fine 。
我缺少什么?
编辑:这似乎可能是 Django 中的一个错误;当通过通用外键级联删除对象时,Django 会忽略传递给字段构造函数的字段名称字符串GenericForeignKey …
StackOverflow 中有很多这样的问题,但其中大部分与房间数据库无关,所以我不得不问一个新问题。
我有一个使用房间数据库的应用程序,它有近 4 个表,这些表之间有很大的关系,因此,例如,当我删除用户列表片段中的用户时,该用户会删除(仅用户名和一些个人信息),但用户的交易并且 LOANS 没有被删除。有人告诉我我必须使用级联删除,但我没有找到太多关于它的信息。
我的用户类模型:
@Entity(tableName = "user_info")
data class UserInfo(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "user_id")
var userId: Long =0L,
@ColumnInfo(name = "full_name")
var fullName:String?,
@ColumnInfo(name= "account_id")
var accountId: String?,
@ColumnInfo(name = "mobile_number")
var mobileNumber:String?,
@ColumnInfo(name = "phone_number")
var phoneNumber:String?,
@ColumnInfo(name = "date_of_creation")
var dateOfCreation:String?,
@ColumnInfo(name = "address")
var address:String?,
)
Run Code Online (Sandbox Code Playgroud)
交易模型类:
@Entity(tableName = "transactions")
data class Transactions(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "trans_id")
var transId: Long = 0L,
@ColumnInfo(name = "user_id")
var userId: …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,其中大多数数据库表与另一个表有很强的关系.目前我正在使用外键强制引用完整性,但我想知道这是否真的是最好的方法.主表中的数据可以由业务用户从管理界面中删除,这意味着必须进行级联删除(或编写几个删除语句),但我不确定我是否真的想要删除所有其他数据同一时间.它可能是很多*可能*在以后有用的数据(报告可能?).但是,除非与主表存在关系,否则辅助表中的数据对应用程序本身基本无用.
表SUBCOURSE引用COURSE COURSE(id,name)SUBCOURSE(id,course_id,name)
所以,1:M.
Hibernate为课程生成:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "course", cascade = CascadeType.ALL)
public Set getSubCourses() {
return this.subCourses;
}
对于它产生的子课程
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "course_id", nullable = false)
public Course getCourse() {
return this.course;
}
现在问题是级联不能按预期工作.我想创建一个SubCourse对象集合(Set),填充它然后将它绑定到Course对象的setSubCourses().然后只需保留Course对象即可.
虽然,在Subcourses表中有ManyToOne的东西,我需要在添加到每个对象的集合之前手动setCourse().如果我不这样做,则在使用其集合持久化Course对象时会引发异常.
你能推荐我什么?
PS或者这可能是游戏的一部分?手动设置每个孩子的父对象?
我正在尝试创建一个捕获父子关系的表,如树.我想只保留两列来捕获这个结构"id"和"parent".我希望数据库能够在删除行时级联删除所有子项.下面是我创建的Hibernate实体,@OnDelete(action = OnDeleteAction.CASCADE)但是我添加了注释,但是ON DELETE CASCADE当Hibernate创建表时,没有添加到表中.
这是一个错误吗?或者有什么我缺少或不理解?
@Entity
public class Tree {
@Id
@Column(name = "id", nullable = false)
private Long id;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "parent", nullable = true)
private List<Tree> children;
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "parent", nullable = false)
private Tree parent;
public Tree(Long id) {
this.id = id;
}
public Tree() {
}
public Long getId() {
return id;
}
protected void setId(Long id) {
this.id = id;
}
public List<Tree> …Run Code Online (Sandbox Code Playgroud) hibernate cascade cascading-deletes jpa-2.0 hibernate-cascade
我对PreUpdate HasLifecycleCallbacks有一些问题.
我有一个实体,假设"A"与实体"B"具有OneToOne关系.所以我有:
/**
* @ORM\Entity()
* @ORM\HasLifecycleCallbacks
*/
class A
{
/**
* @ORM\OneToOne(targetEntity="B", inversedBy="attrA", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="fieldB", referencedColumnName="id")
*/
private $attrB;
public function __construct()
{
$this->attrB = new B();
}
/**
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function updateSomthing(){
//$gestor = fopen("/pruebitas.txt", "r");
$this->attrB->setDate($this->getDate());
}
}
Run Code Online (Sandbox Code Playgroud)
B级是:
class B
{
/**
* @ORM\OneToOne(targetEntity="A", mappedBy="attrB")
*/
private $attrA;
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个新的实体A,一切正常,问题是当我更新实体A时,PreUpdate函数是fire,(因为它在注释行中创建文件),但实体B不会在数据库中持久存在,即使B中的字段应该更新.
有没有想法在PreUpdate上级联持久化?
谢谢!!
我正在尝试添加*.zip文件的上下文菜单.用nessesary参数启动我的python脚本.
我已添加注册以下键:
[HKEY_CLASSES_ROOT\WinZip\shell\SSSeracher] "MUIVerb"="SSSearcher Script" "SubCommands"="SSSearcher.Rule1;SSSearcher.Rule2;SSSearcher.Rule3;SSSearcher.Custom;SSSearcher.Config"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Rule1] @="Rule #1"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Rule1\command] @="C:\\APPS\\python\\Scripts\\sssearcher.py \"%1\" \"1\""
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Rule2] @="Rule #2"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Rule2\command] @="C:\\APPS\\python\\Scripts\\sssearcher.py \"%1\" \"2\""
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Rule3] @="Rule #3"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Rule3\command] @="C:\\APPS\\python\\Scripts\\sssearcher.py \"%1\" \"3\""
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Custom] @="Custom rule"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Custom\command] @="C:\\APPS\\python\\Scripts\\sssearcher.py \"%1\" \"4\""
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Custom] @="Custom rule"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Custom\command] @="C:\\APPS\\python\\Scripts\\sssearcher.py \"%1\" \"4\""
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Config] @="Config File"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\SSSearcher.Config\command] @="vim C:\\APPS\\python\\Scripts\\sssearcher.pyc"
Run Code Online (Sandbox Code Playgroud)
当菜单显示点击那些绝对没有.
我一直在关注这个教程:http: //msdn.microsoft.com/en-us/library/windows/desktop/hh127467%28v=vs.85%29.aspx
我遗漏了一些东西,但不幸的是我找不到答案.你能帮帮我吗?
我拥有的数据库的设置Company可以有很多Engineer,也可以有很多Territory.如果我应该从列表中删除公司,我需要做一个干净的退出,所以不要只删除公司表格中的公司表格.我必须确保所有记录都被删除.因此,没有子/相关记录成为孤儿数据.
如果我要从所有表中删除一条记录,我只想删除它FirstOrDefault,然后我可以使用
public void RemoveCompany(long companyId)
{
using (var db = new BoilerServicingDbContext())
{
var ec = db.Engineers.FirstOrDefault(x => x.CompanyId == companyId);
db.Engineers.Remove(ec);
var tc = db.CompanyTerritories.FirstOrDefault(x => x.CompanyId == companyId);
db.CompanyTerritories.Remove(tc);
var p = db.Companies.FirstOrDefault(x => x.Id == companyId);
db.Companies.Remove(p);
db.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,每个公司有多个工程师,每个公司有一个以上的领土.是否有一个简单的方法,如一般的数据库意义.
DELETE * FROM Engineers WHERE companyId = 1;
Run Code Online (Sandbox Code Playgroud)
此刻我没有Cascading删除设置,所以除此之外.任何其他选择.
c# model-view-controller asp.net-mvc entity-framework cascade