Tag:

应该在哪里“@Transactional”放置服务层或DAO

首先,我可能会问一些以前曾被问及过的问题,但是我却找不到search结果。 一般来说(或总是:))我们定义了服务层上的事务性注释,通常是春季冬眠 Controller-> Manager-> Dao-> Orm。 我现在有一种情况,我需要在基于客户端站点的域模型之间进行select。 假设客户A正在使用我的域名模式,但是其他客户端网站会给我一个networking服务,而不是使用我们的域名模式。 我应该更换哪一层。 我相信它必须是Dao,它将从Web服务获取数据并将其发送回去。两个分别写入的Dao层并根据场景插入。 现在我已经意识到,当我们把@Transactional放在服务层时,我们一直在做紧耦合(如果有这样的事情或者说没有松耦合)。 这么多大脑不会是错的,或者他们(我怀疑它)。 所以问题是“哪里应该”@Transactional“放置服务层或DAO? 这是服务层向下,我应该更换。

DAO和服务层(JPA / Hibernate + Spring)

我正在devise一个基于JPA / Hibernate,Spring和Wicket的新应用程序。 DAO和服务层之间的区别对我来说还不是很清楚。 根据维基百科,DAO是 一个为某种types的数据库或持久性机制提供抽象接口的对象,提供一些特定的操作而不暴露数据库的细节。 我想知道一个DAO是否可以包含对数据访问没有多大作用的方法,但使用查询更容易执行? 例如“获取在某一机场运营的所有航空公司的名单”? 这听起来更像是一个服务层方法,但我不确定在服务层中使用JPA EntityManager是否是一个良好实践的例子?

枚举在hibernate

在DAO中有一个值来自Java枚举的字段通常很有用。 一个典型的例子是一个loginDAO,其中通常有一个字段表示用户为“NORMAL”或“ADMIN”。 在Hibernate中,我将使用以下两个对象以(半)types安全的方式表示这种关系: class User { String username; String passwd; UserType type; } class UserType { private enum Type {ADMIN, NORMAL}; private String type; //Setters/Getters for Hibernate public void setType(String type); public String getType(); //Setters/Getters for user public void setUserType(UserType.Type t); public UserType.Type getUserType(); public static UserType fromType(UserType.Type t); } 这是有效的,但是我发现UserType类不够用,需要太多的官僚作风来存储一些值。 理想情况下,Hibernate应直接支持枚举字段,并创build一个额外的表来存储枚举值。 我的问题是:是否有任何方法直接映射在Hibernate的枚举类? 如果没有,我的模式代表枚举足够好还是我错过了什么? 人们使用什么其他模式?