Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate注释-1到1,无自动增量_Java_Hibernate_Jpa_Annotations_Persistence - Fatal编程技术网

Java Hibernate注释-1到1,无自动增量

Java Hibernate注释-1到1,无自动增量,java,hibernate,jpa,annotations,persistence,Java,Hibernate,Jpa,Annotations,Persistence,当一个表的主键列是另一个表的外键且没有自动增量(MySQL)时,如何继续使用Hibernate注释(JPA) 谢谢。类似于以下内容的功能应该可以使用(没有测试确切的语法,但应该很接近): 在持久化“id”字段之前,您需要手动设置它,并且不记得是否可以在初始保存之前设置“other”实体,如果这样做,hibernate可能会抱怨。但是,如果设置了“id”列,那么当您重新加载实体时,您也应该加载关系。想到的第一种方法是,在我持久化“id”字段之前,我会通过“max(a.id)”从另一个表中检索最后一

当一个表的主键列是另一个表的外键且没有自动增量(MySQL)时,如何继续使用Hibernate注释(JPA)


谢谢。

类似于以下内容的功能应该可以使用(没有测试确切的语法,但应该很接近):


在持久化“id”字段之前,您需要手动设置它,并且不记得是否可以在初始保存之前设置“other”实体,如果这样做,hibernate可能会抱怨。但是,如果设置了“id”列,那么当您重新加载实体时,您也应该加载关系。

想到的第一种方法是,在我持久化“id”字段之前,我会通过“max(a.id)”从另一个表中检索最后一个持久化的“id”,然后,我设置“id”通过其Setter方法获取值。我会尽力让你知道的。谢谢。你周围有其他实体对象吗?它是在保存此实体之前、之后还是在保存此实体期间持久化的?如果您在事务中执行此操作,那么您可以执行以下操作:em.persist(other);other.getId();不要担心max(a.id)这两个东西都是同时保存的(你知道,不是同时保存的。Hibernate的引擎会注意),因为保存FK的实体将另一个实体作为其字段(例如a.setB(b)),并带有适当的注释“标记”(@OneToOne、@JoinColumn和@Cascade)。因为Hibernate save()方法只用于持久化实体。我说得清楚了吗?我尝试了我的建议,因为我将format_sql设置为true,所以我在这里看到的只是持有FK的实体(如上所述的实体)的sql“insert”语句。长话短说。。。没用。即使在持久化对象之前使用hql(max()…)通过setter设置A id的字段,hibernate也会抛出MySQL异常来警告约束错误(无法添加或更新子行:…)。即使一个实体有一个B实体,我也应该保留B实体吗?我只想提一下(虽然我认为这与此无关),它是一个JSF项目。我想我理解您的意思,并且不确定它是否能够在一个持久化调用中工作,即使使用级联值集也是如此。要查看映射是否有效,请尝试进行持续调用(有点痛苦,但只是为了测试):em.perist(其他);依赖.setId(其他.id);em.persist(依赖);显然,最好是在事务中这样做,但它至少应该证明映射是正确的,并且hibernate可以在这个级别处理它,然后继续尝试让它自动发生。
@Id
private int id;

@OneToOne
@JoinColumn(name = "id", updatable = false, insertable = false)
private RelationEntity other;