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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Orm - Fatal编程技术网

Java 在数据库中思考还是在Hibernate中思考?

Java 在数据库中思考还是在Hibernate中思考?,java,hibernate,orm,Java,Hibernate,Orm,我是Hibernate新手,在设计从数据库到Hibernate代码生成的关系时遇到了几个问题。我更喜欢使用外键约束来设计一对一、一对多、多对多的关系,因为它更直观、更清晰。但是,当使用DB Browser生成代码时,我发现关系混乱,我必须大量手动重写xml以获得所需的关系。若表发生变化,那个么可能很难保持数据库和Hibernate之间的一致性 你能给我一些建议来弥补数据库设计和面向对象编程之间的差距吗?可能有不同的方法,例如,我认识的一些人不使用约束在数据库中设计关系,而是依赖Hibernate

我是Hibernate新手,在设计从数据库到Hibernate代码生成的关系时遇到了几个问题。我更喜欢使用外键约束来设计一对一、一对多、多对多的关系,因为它更直观、更清晰。但是,当使用DB Browser生成代码时,我发现关系混乱,我必须大量手动重写xml以获得所需的关系。若表发生变化,那个么可能很难保持数据库和Hibernate之间的一致性

你能给我一些建议来弥补数据库设计和面向对象编程之间的差距吗?可能有不同的方法,例如,我认识的一些人不使用约束在数据库中设计关系,而是依赖Hibernate中的xml来定义关系换句话说,Hibrate中的关系(部分)独立于数据库?


非常感谢

当使用ORM时,您的领域模型有3个“真相来源”:

  • 数据库
  • 映射
  • 班级
你需要做的是决定你将管理这三(3)个项目中的哪两(2)个,并自动生成第三个项目

我选择创建自己的类和映射,并让
hbm2ddl
为我生成数据库。无论我想让数据库做什么,我都要确保在映射中正确描述它(例如键、索引、列长度和约束)。如果我需要在我的数据库中做一些“自定义”的事情,我会确保用各种hibernate结构来描述它,例如:

  • 数据库对象:
  • 扩展方言:
  • 用户类型:
  • 拦截器:

最终的结果是,新开发人员只需签出代码,运行hbm2ddl“导出”,并立即开始处理项目,确保他/她的数据库架构与我的数据库架构100%相同。

如果xml中的hibernate映射让您感到不适,请检查以下内容:


在我看来,注释要干净得多,而且很容易重构

是的,我想要数据库的低级控制。在我的例子中,注释可能是正确的方式。谢谢。如果整体数据库设计(内部数据库结构)本身发生了变化(很少发生),那么它通常不独立于环境的其他部分(回想一下DBMS中的逻辑数据独立性,这总是很难实现)。它不仅限于Hibernate或任何其他ORMs,而且如果使用普通JDBC,同样的事情也会发生。