Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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 生成跨多个表唯一的主键_Java_Mysql_Database_Hibernate - Fatal编程技术网

Java 生成跨多个表唯一的主键

Java 生成跨多个表唯一的主键,java,mysql,database,hibernate,Java,Mysql,Database,Hibernate,我正在使用Hibernate开发一个餐厅应用程序。我有几个实体,如比萨饼、饮料、意大利面等 我希望这些数据能够持久化到不同的表中,但主键在所有表中是唯一的。 i、 e如果我说itemId 4,那么识别任何可用的食物就足够了 知道怎么做吗,伙计们 我更喜欢使用Hibernate注释的解决方案:-| UUID对于所有表都是唯一的,但您无法确定哪个表仅基于该id 老实说,这是一个有点奇怪的要求。但是如果您确实坚持这样做,您可以简单地将表/实体名称作为主键的前缀。为此,您需要一个自定义生成器。看 您可以

我正在使用Hibernate开发一个餐厅应用程序。我有几个实体,如比萨饼、饮料、意大利面等

我希望这些数据能够持久化到不同的表中,但主键在所有表中是唯一的。 i、 e如果我说itemId 4,那么识别任何可用的食物就足够了

知道怎么做吗,伙计们


我更喜欢使用Hibernate注释的解决方案:-|

UUID对于所有表都是唯一的,但您无法确定哪个表仅基于该id

老实说,这是一个有点奇怪的要求。但是如果您确实坚持这样做,您可以简单地将表/实体名称作为主键的前缀。为此,您需要一个自定义生成器。看


您可以使用继承。将基本实体
@MappedSuperclass
,将
@heritation
策略设置为每个类的表,然后将
设置为面食
比萨饼
。如果字段之间没有太大差异,您甚至可以使用带有鉴别器列的单表策略。如果您的实体类型可能会增长,您可以简单地使用一个带有列的
,您可以使用db序列,然后您的任何实体都可以使用此序列生成其Id。

我认为您的分析不太正确。如果你看看你将如何使用你提到的实体,我想也会有一个实体,像order,包含其中的几个,此外,所有这些实体都有一些相似性,它们都可以被视为“菜单项”的子类,因为它们都有一些共同属性,例如价格,并且可以以相同的方式使用,例如包含在订单中


您可以查看中的第5.1.6节,了解如何实现将OO模型映射到一个表或多个表的各种策略。请注意,表中列出了每个班级的策略和10.1.5。每个具体类的表将为您提供当前的表设置,但您需要能够生成密钥,这是MySQL无法轻松做到的。但是,我认为您会发现基类上应该有一些公共属性,因此需要另一种形式的映射,您最终会得到一个菜单项表,并且可以轻松地生成一个id。

我同意Mark,似乎每个子类都有一个表适合您的设计,并且需要在多个项之间有一个id。还要注意的是,如果您的项目位于多个表中,而没有一个公共父表,则当您需要这些项目的FK时,可能会导致一些问题。

使用UUID会使项目ID在账单和其他东西上打印时看起来非常难看。我能不能得到唯一的整数ID?奇怪的要求?:-)我可以创建一个Item类来表示所有的食物项目。但是我想通过适当的分类来保持我的对象模型干净。哇,这听起来是个好主意。谢谢尽管我会在选择答案之前等待一段时间,看看是否有其他解决方案。:-)为什么不将所有项目存储在一个表中,并添加一个指示标识/项目组的字段?@Arjan从关系的角度来看,这是一个很好的解决方案,但它会弄乱我的OO模型:-其次,它不是正确的规范化。比萨饼可能与啤酒具有不同的属性。:-)是的,我不知道你为每一件物品储存了什么属性:)比萨饼皮、外皮、橄榄、蘑菇。。。等等。啤酒-布尔值被切碎:-)