我试着自己学习,但很快就开始意识到,在无尽的书籍结束时,我会知道所有的@Entity等低级别的东西而不了解顶级。
所以我的理解是:
(与Spring共同连接)
我的问题涉及上述几点:
我们为每个域模型编写单个DAO接口?如果我们有参与涉及多个域模型的交叉切割行为,我们声明新的DAO接口实现并相应地调用它?例如:"来自Stock,Stock的客户订单检查物品是否可用 - >确认它是否是"那会去哪儿?
Hibernate如何与MVC交互?是否有任何重要方面需要注意?
在一本书中我注意到了:
覆盖等于和哈希码
"在简单的场景中,Hibernate能够维护实体等效性,而无需对域对象本身进行任何特殊更改。但是,如果您的应用程序要求您向Java集合添加entites,例如java.util.Set,或者您计划使用分离的实体,则可能需要覆盖域的默认equals()和hashCode()方法对象"
也许我不太了解它,什么是分离的实体?那些是我们从Hibernate上下文中取出的 - 实际上只是类的集合吗?
我想要的是安全地做Hibernate的工作,然后给我一个模型,我将给Servlet,并将其委托给适当的View。我们通过DAOimpl类方法的简单返回来提取该模型,还是有点棘手?
如果我要使用没有ORM框架的持久层,只需使用普通的JDBC,我的问题是什么?我听说Hibernate有一些处理并发请求的智能会话,那么JDBC会发生什么?
业务逻辑在哪里?是DAOimpl课吗?
如果我的一些问题是不幸的话,我很抱歉,我感谢任何批评和纠正。
谢谢。
答案 0 :(得分:2)
我们为每个域模型编写单个DAO接口?如果我们有 交叉涉及不止一个的交叉行为 域模型我们声明新的DAO接口实现和调用 相应的?例如:“来自股票,股票支票的客户订单 项目是否可用 - >确认它是否“会去哪里?
你可以这样做。可能更简单的方法是让服务管理DAO调用。如果使用Spring,则可以在服务方法上定义事务边界,因此所有DAO方法都将参与同一事务。因此,您的DAO保持特定于各自的模型,理论上更简单。请记住,当任何DAO刷新会话时,所有更改都会被推送到数据库。因此,如果你有一个User
和一个Profile
模型,并且它们在hibernate中被适当地映射,如果你创建一个实例并调用flush会话,它们都将被保存。
这种方法很有吸引力,因为DAO应该做一件事 - 执行持久性操作。如果您开始制作复杂的DAO,您可能会将应用程序的业务需求封装在持久层中,而您不希望这样做。服务是订购持久性操作以实现业务需求的地方。
Hibernate如何与MVC交互?是否有任何重要方面 要知道吗?
MVC是一种范例。模型视图控制器。目的是在您的应用程序中定义明确的关注点,以便各个组件可以专注于一件事。例如,Model对象不应该告诉视图如何渲染自身。 Hibernate是一个ORM持久性实现。 Hibernate代码是保存模型对象的一种方法。 MVC和hibernate之间几乎没有什么关系,你可以在一个应用程序中使用MVC而不是Hibernate,或者在应用程序中使用Hibernate而不是MVC。
也许我不太了解它,什么是分离的实体? 那些是我们从Hibernate环境中取出的 - 有效 只是课程的集合?
来自documentation“Detached - 一个已分离的实例是一个持久的对象,但其Session已被关闭。”
以后仍然可以保存分离的实例,但需要将它们与会话重新关联。
如果我要在没有ORM框架的情况下执行持久层,只需使用plain JDBC,我的问题是什么?我听说Hibernate有些聪明 会话处理并发请求,所以会发生什么 JDBC?
主要缺点是,如果您的应用使用对象来表示实体,则需要将jdbc结果转换为对象。你还需要编写sql。使用jdbc并不是一个坏主意。 ORM是一种选择。 JDBC是另一种选择。你也可以混合搭配,但这可能很复杂。对您的应用程序的并发请求不应该是您的持久层的关注点。只要确保您的DAO不保存任何状态(即使用静态变量),您应该没问题。
业务逻辑在哪里?是DAOimpl类吗?
这是您的域模型和服务的组合。如前所述,如果您需要按顺序保存,可以使用服务。如果您要求某些字段应限制为某些值,则可能在模型本身中。它不在DAO中 - 那些应该只处理持久性。
答案 1 :(得分:1)
我从spring / hibernate web应用程序中删除了dao层 - 对我来说似乎没用。事实上,我无法想象它们现在会包含什么。但这似乎是somewhat debatable。
对于使用hibernate重写equals和hashcode,我通常使用db生成的自动id,这有点debatable。只要你知道id只在第一次持久化到db后出现,就没有问题。
业务逻辑在哪里?
在您的域对象/休眠实体上,this少controversial。