当前位置: 首页 > 面试题库 >

没有外键的JPA关联

游炳
2023-03-14
问题内容

是否可以在不使用JPA在数据库中创建外键的情况下建立ManyToOne关联?

这些表由另一个系统拥有,并异步填充。因此,数据库中不能有FK。几乎总是,最终还是有联系。

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
        @JoinColumn(name="`Order Type`", referencedColumnName = "`Order Type`", insertable = false, updatable = false),
        @JoinColumn(name="`Order No`", referencedColumnName = "`No`", insertable = false, updatable = false)
}, foreignKey = @javax.persistence.ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
private OrderHeader orderHeader;

问题是,即使ConstraintMode.NO_CONSTRAINT,JPA SchemaUpdate也会尝试添加FK。

[错误] ohthSchemaUpdate-无法添加外键约束

如果它没有使其余语句失败,我们可以忽略它

[错误] ohthSchemaUpdate-语句关闭后不允许执行任何操作。

我们使用的是hibernate-entitymanager 4.3.7.Final和JPA 2.1。


问题答案:

ConstraintMode.NO_CONSTRAINT被忽略的事实看起来像是Hibernate 4中的一个错误,因为已在5中修复。

https://hibernate.atlassian.net/browse/HHH-8805

建议添加已弃用(hibernate而不是JPA)注释

@ForeignKey( name = "none" )

关系应该起作用。



 类似资料:
  • 问题内容: 我将Spring和Hibernate用作JPA提供程序,并尝试获取@OneToMany(具有许多电话号码的联系人)以将外键保存在电话号码表中。从我的表单中,我得到一个Contact对象,其中有一个Phone(数字)列表。Contact可以正确持久保存(Hibernate从指定序列中获取PK)。电话(号码)列表也将保留正确的PK,但“联系人”表中没有FK。 希望我掌握了以上所有相关内容,

  • 我正在为Django管理员设置: model.py 在admin.py 对此,我得到了以下错误: (admin. E202)“磁盘。文件”没有“磁盘。设置”的外键 根据https://docs . django project . com/en/dev/ref/models/fields/# django . db . models . foreign key中的文档,它应该可以工作。 我做了一些

  • 现在表1和表2没有使用外键的直接关系。对应的JPA实体如下所示: 我的代码看起来像: 则尝试使用以下方法获取值: Table2有大约6列带有@id注释,而我不能将它更改为只有两列带有@id注释。 请告诉我: > 如果有可能为我的方法1(select子句中的子查询)使用CriteriaBuilder编写代码。 请注意,我使用的是普通的JPAAPI。DB是Oracle11g。JDK版本为1.7。

  • 这是我的用户。JAVA 这是我的地址。JAVA 但是当我试图持久化对象时,我得到了这个异常 错误不会来,如果我删除"NOTNULL"约束从FORIGN_KEY"USER_ID",但我需要使它作为一个NOTNULL列我应该怎么做。 这是我的注册方法 这是我的SQL脚本

  • 我有一个实体,它的复合主键由两个字段组成,其中一个也是复合外键的一部分。 背景:我有实体<代码>人员 、<代码>区域 和<代码>会话 。 与具有多对多关系,使用称为“和实体。 所以,我有,主键为(,)。本身是的外键。 也有一个字段。我希望(,)是的复合外键。 我的PersonSession代码: } 这看起来不错,它在数据库中创建了所有正确的关系。当我尝试插入个性化会话对象时,问题就出现了——ar

  • 创建两个表: 课程(Course_id(主键),Course_name) Student(Roll_no(主键),Name,Course_id(外键))并检索“BSC”课程录取的所有学生的姓名。 设BSC的course_id为105。 其查询将是:从Student中选择Name(其中Course_id=105) 在不知道Course_id(仅使用Course_name)的情况下,我可以查询学生的姓