Oracle 如何使用Hibernate将我的唯一键与有效的空内部值相匹配?
我有一个表(不是由我创建的,也不能由我修改),其中包含约30列,其中包含序列中的代理主键。在这30列中,只有3列不可为空(我们称它们为col1、col2和col3),使用这3列和其他6列可为空(col4…col9),我有一个唯一的索引。我如何用Hibernate映射它?考虑到我不允许更改任何数据库属性,建议的最佳解决方案是什么 考虑一下,我想要实现一个CRUDRESTAPI,该api应该检查该实体是否已经存在以更新数据,否则,将其插入同一方法中。将Oracle 如何使用Hibernate将我的唯一键与有效的空内部值相匹配?,oracle,hibernate,database-design,orm,jpa-2.0,Oracle,Hibernate,Database Design,Orm,Jpa 2.0,我有一个表(不是由我创建的,也不能由我修改),其中包含约30列,其中包含序列中的代理主键。在这30列中,只有3列不可为空(我们称它们为col1、col2和col3),使用这3列和其他6列可为空(col4…col9),我有一个唯一的索引。我如何用Hibernate映射它?考虑到我不允许更改任何数据库属性,建议的最佳解决方案是什么 考虑一下,我想要实现一个CRUDRESTAPI,该api应该检查该实体是否已经存在以更新数据,否则,将其插入同一方法中。将(1,2,3)值(col1,col2,col3)
(1,2,3)值(col1,col2,col3)
传递到我的查询应该会导致一个空表的成功插入。在此之后,如果我尝试插入(1,2,3,4)值(col1,col2,col3,col4)
,并且第四个值来自上一个唯一索引索引索引的列,则它应该插入另一行,结果是:
seqPK col1(notNull) col2(notNull) col3(notNull) col4(null) col25(null) ...
1 1 2 3 null null ...
2 1 2 3 4 null ...
因为(1,2,3,null(x6))不同于(1,2,3,4,null(x5))。但是如果我尝试插入(1,2,3,25)值(col1,col2,col3,col25)
,并且第四个值来自非索引列,它应该像这样更新插入的第一行:
seqPK col1 col2 col3 col4(null) col25(null) ...
1 1 2 3 null 25 ...
2 1 2 3 4 null ...
我计划在我的findById中使用
@Query
(传递所有9个参数),并始终强制它们不为null(@NotNull
),从而在不使用hibernate提供的任何@Id
功能的情况下强制它们的属性具有唯一性。有更好的方法吗?您好。这还不清楚。“映射到这个”是什么意思——映射到什么?为什么不使用PK作为id呢?告诉我们你可以做这些插入有什么意义?“最小”是什么意思?什么是未简化的版本?您是否理解在SQL中,当列是“唯一”且允许为null时,这意味着有两个这样的具有任何null的子视图被认为是不同的&即使它们在处理null=null时是相同的,也可以在一个表中?您确实想要多个这样的行吗?这样一个包含null的子代码不标识表的特定行。你不能让FK和他们联系。“映射此对象”意味着从表2中正确创建Java实体。我不能使用PK作为id,因为它是序列中的代理键,它不会添加任何关于行如何可以唯一的信息,只有在检查了行的唯一性之后才能保证它。3.重点是展示一个示例,说明我的hibernate实体在插入数据库4之前应该接受什么。最小意味着不填充其他所有列。未简化的版本将填充所有第5列。关于你的最后一点,我同意你的观点,这个数据库设计有多么糟糕。不幸的是,我不允许更改它。“映射此”来自对象关系映射,正如作为标记指出的那样。我知道映射的含义,我的意思是,您不清楚您正在尝试做什么。感谢您的耐心。如果你对我想要什么有任何疑问,尽管问