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映射_Java_Hibernate_Intellij Idea_Nhibernate Mapping - Fatal编程技术网

Java 不同数据库和域模型之间的Hibernate映射

Java 不同数据库和域模型之间的Hibernate映射,java,hibernate,intellij-idea,nhibernate-mapping,Java,Hibernate,Intellij Idea,Nhibernate Mapping,我已经创建了一个域和数据库模型。域模型用于RESTAPI。两者都有类似的组成部分,如产品、类别、客户、零售商等。。。但如果你仔细看看这两种模型。你可以看到一些不同。例如,您可以在数据库模型中看到零售商有多个产品。但在域模型中,您可以看到每个产品都有一个零售商。这样做的原因是因为我需要能够返回不同零售商的多个产品列表 您还可以在域模型中看到产品具有productproperties。在数据库中,这也是以与域模型不同的方式完成的。数据库模型有一列属性(例如:高度、重量、分辨率等)。在数据库中,产品有

我已经创建了一个域和数据库模型。域模型用于RESTAPI。两者都有类似的组成部分,如产品、类别、客户、零售商等。。。但如果你仔细看看这两种模型。你可以看到一些不同。例如,您可以在数据库模型中看到零售商有多个产品。但在域模型中,您可以看到每个产品都有一个零售商。这样做的原因是因为我需要能够返回不同零售商的多个产品列表

您还可以在域模型中看到产品具有productproperties。在数据库中,这也是以与域模型不同的方式完成的。数据库模型有一列属性(例如:高度、重量、分辨率等)。在数据库中,产品有一个productproperty,它有一个值和一个属性

域模型:

数据库模型/设计:

我对Hibernate做了一些研究,并做了一个测试项目来看看这个映射是如何工作的。我做了一个简单的项目。但当我开始用这些模型创建一个项目时,我陷入了困境。我找不到一种方法让它工作。我确实读了一些关于“POJO”的书,所以也许一个解决方案可以是为数据库创建POJO,然后将它们映射到我的域模型,但我不确定这一点。所以我的问题是,如何创建一个数据库,比如带有hibernate映射的域模型的模型


PS:我知道数据库模型与域模型不完全一致。

对于Hibernate映射,您应该使用数据库模型,因为这些模型直接映射到数据库字段。域模型/POJO应在控制器方法中使用,这也提供了一层安全性,因为如果您决定修改数据库表,您的API不会受到影响。

对于Hibernate映射,您应该使用数据库模型,因为这些模型直接映射到数据库字段。域模型/POJO应在控制器方法中使用,控制器方法还提供了一层安全性,因为如果您决定修改数据库表,您的API不会受到影响。

这是一个没有简单答案的问题,因为您要求的是以下内容:

请让这一切顺利

您应该从HibernateJava类生成DDL(自上而下),或者从DB模式生成HibernateJava类(自下而上)

自上而下的方法由hibernate直接支持——只需google使用hibernate生成DDL

IntelliJ IDEA支持自底向上的方法。本博客文章解释了如何做到这一点:

我建议您采用自上而下的方法,因为这是一种独立于工具的方法,并且支持得更好

为不同的目的开发hibernate类和数据库模式会导致不希望出现的映射问题

此外,您正在谈论用于RESTAPI的
模型。 我建议,您使用HibernateJava类模型作为内部域模型——可能并不完美,但已经足够好了。RESTAPI类模型对外公开,对该模型的更改应谨慎,因为更改该模型时可能会破坏某些使用者

你应该如何继续

你应该采取自上而下的方法。 创建尽可能反映实体关系图的java类,向它们添加hibernate注释,使用
drop Create
在启动时删除并重新接收模式(读取),并确保应用程序启动,尽快成功创建模式

使用这种方法,如果映射有效,您将立即得到反馈


更高级:对真实数据库使用单元测试,以确保您的hibernate模型按预期工作。

这是一个没有简单答案的问题,因为您要求的是以下内容:

请让这一切顺利

您应该从HibernateJava类生成DDL(自上而下),或者从DB模式生成HibernateJava类(自下而上)

自上而下的方法由hibernate直接支持——只需google使用hibernate生成DDL

IntelliJ IDEA支持自底向上的方法。本博客文章解释了如何做到这一点:

我建议您采用自上而下的方法,因为这是一种独立于工具的方法,并且支持得更好

为不同的目的开发hibernate类和数据库模式会导致不希望出现的映射问题

此外,您正在谈论用于RESTAPI的
模型。 我建议,您使用HibernateJava类模型作为内部域模型——可能并不完美,但已经足够好了。RESTAPI类模型对外公开,对该模型的更改应谨慎,因为更改该模型时可能会破坏某些使用者

你应该如何继续

你应该采取自上而下的方法。 创建尽可能反映实体关系图的java类,向它们添加hibernate注释,使用
drop Create
在启动时删除并重新接收模式(读取),并确保应用程序启动,尽快成功创建模式

使用这种方法,如果映射有效,您将立即得到反馈


更高级:对真实数据库进行单元测试,以确保您的hibernate模型按预期工作。

谢谢您的回复。你可能有一个如何做到这一点的例子吗?谢谢你的回答。你能举个例子来说明如何做到这一点吗?非常感谢你的回复。我将研究一下自上而下和自下而上的方法。但是你会建议哪一个呢?@dirk.z查看hibernate:
虽然