创建样板项目以向启用JPA的数据库公开RESTful API.它使用以下版本:
- Spring 3.2.6
- Hibernate 4.3.0
- Jersey 2.5.1
我终于能够让它们一起玩,但仍有一些问题依然存在.这是最令人费解的事情之一(参见REST服务类的摘录)
@Service
@Path("resources")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
@Transactional
public class ResourceServices extends AbstractServices<Resource> {
...
}
Run Code Online (Sandbox Code Playgroud)
如果使用@Service注释类,则忽略@Transactional注释,并且不启动方法的事务.但是,当更改为@Component时,一切正常.想不通,为什么.
整个项目都可以在这里看到
我很好奇这两种执行ajax调用的方式有什么区别:
<h:commandButton value="Submit" action="#{bean.action}">
<f:ajax execute="@form" render="component"/>
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
和
<h:commandButton value="Submit">
<f:ajax listener="#{bean.action}" execute="@form" render="component"/>
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
人们似乎更频繁地使用第一种方式,但第二种似乎也很好用......
JPA比较新,所以我有一种架构问题.假设我有表EMPLOYEE和DEPARTMENT有多对一关系(即许多员工为一个部门工作):
EMPLOYEE
EMPLOYEE_ID
EMPLOYEE_NAME
DEPARTMENT_ID
DEPARTMENT
DEPARTMENT_ID
DEPARTMENT_NAME
Run Code Online (Sandbox Code Playgroud)
所以我可以为Employee和Department定义合适的实体,没有问题.但是,在一个视图中,我想显示具有该部门工作人员数量的部门列表,如下所示:
SELECT D.DEPARTMENT_NAME,
(SELECT COUNT(*) FROM EMPLOYEE E WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID) NUMBER_OF_EMPLOYEES
FROM DEPARTMENT D
Run Code Online (Sandbox Code Playgroud)
我只是不确定使用JPA实现此目的的正确策略是什么...我不想总是为Department实体获取员工数量,因为在需要时只有一个视图.
看起来Hibernate的@Formula是一种可能的方法,但是它不符合JPA标准.