Tag: foreign keys

在数据库模式中hibernate二级缓存和ON DELETE CASCADE

我们的Java应用程序有大约100个映射到数据库(SQL Server或MySQL)的类。 我们使用Hibernate作为我们的ORM(使用XML映射文件)。 我们在数据库模式中指定FOREIGN KEY约束。 我们的大多数FOREIGN KEY约束也指定了ON DELETE CASCADE 。 我们最近开始启用Hibernate二级缓存(针对流行实体和集合)以缓解一些性能问题。 自从我们启用了二级缓存以来,性能得到了提升。 但是我们也开始遇到ObjectNotFoundExceptions。 似乎发生了ObjectNotFoundExceptions,因为数据库正在删除Hibernate 下面的表行。 例如,当我们删除具有Hibernate的Parent时,数据库模式将ON DELETE CASCADE到任何子实体。 这显然没有Hibernates知识,所以它没有机会更新二级缓存(并删除任何已删除的子实体)。 我们相信这个问题的解决方案是从我们的数据库模式中删除ON DELETE CASCADE (但保留FOREIGN KEY )。 相反,我们需要配置Hibernate以使用普通删除SQL删除Child依赖项,这也将使Hibernate更新二级缓存。 一些有限的测试表明这种方法似乎有效。 我想得到一些社区反馈。 我们的问题是否有其他(更好的?)解决方案? 其他人如何处理这种情况? 通常,在使用Hibernate的数据库模式中使用ON DELETE CASCADE时应该考虑哪些权衡? 谢谢。

Hibernate外键与复合主键的一部分

我必须使用Hibernate并且我不太确定如何解决这个问题,我有2个表与1..n关系,如下所示: ——- TABLE_A ——- col_b(pk) col_c(pk) [其他领域] ——- 表-B ——- col_a(pk) col_b(pk)(fk TABLE_A.col_b) col_c(fk TABLE_A.col_c) [其他领域] 如何使用Hibernate进行管理? 我不知道如何声明包含主键部分的外键。 我的数据库模式是从Hibernate模型生成的。

Hibernate:外键的列数错误

我已经定义了我的两个实体类User和Permission之间的多对多关系。 用户具有username和countyId的主键组合,并且我的Permission表具有常规整数Id。 表UserPermission具有三个外键作为其主键:username,countyId和permissionId。 由于这是一个遗留数据库,我将无法使用Right Thing(™)并在User上创建一个整数主键。 我在User.class中定义了这样的多对多关系: @ManyToMany(targetEntity=Permission.class, cascade={ CascadeType.PERSIST, CascadeType.MERGE } ) @JoinTable(name=”tblUserPermission”, joinColumns = { @JoinColumn(name=”username”), @JoinColumn(name=”countyId”) }, inverseJoinColumns = { @JoinColumn(name=”permissionId”) }) private Collection permissions; Permission.class说: @ManyToMany( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = “permissions”, targetEntity = User.class ) private Collection users; 我认为这是要走的路,但是当我启动使用Hibernate 3的Spring上下文时,我得到: Caused by: org.hibernate.AnnotationException: A Foreign key refering com.mydomain.data.entities.User from com.mydomain.data.entities.Permission […]

Hibernate问题:外键必须与引用的主键具有相同数量的列

目标:我想将ImportJob中的importJobId作为分配表的id的外键,这样当我们有importJobId然后只有我们可以在分配时没有Job而没有任何分配。 ImportJob表的复合主键为[ORGID,IMPORTJOBTYPE],我试图在hibernate中创建外键关系 在Allocation.hbm.xml中没有运行并收到错误消息: Foreign key (FKB29B5F7366007086:ALLOCATIONS [importjobid])) must have same number of columns as the referenced primary key (IMPORTJOBMANAGMENT [ORGID,IMPORTJOBTYPE]) 这是我的ImportJob.hbm.xml文件 以下是bean类供参考: public class AllocationBean extends WorkbenchBeanBase { private static final Logger log = Logger.getLogger(AllocationBean.class); private Float allocations; private String importJobType; private long id; private long orgId; } public class ImportJobManagment implements Serializable { private […]