【发布时间】:2016-07-11 12:36:06
【问题描述】:
- 正在尝试集成 Spring MVC 和 Hibernate & Oracle 11g
- 表是 Users & Org & UserOrg[forgin Keys userId,orgId]
-
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tests</groupId> <artifactId>Test</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>tests Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <spring.version>4.1.5.RELEASE</spring.version> <hibernate.version>4.3.8.Final</hibernate.version> <mysql.version>5.1.10</mysql.version> <junit-version>4.11</junit-version> <servlet-api-version>3.1.0</servlet-api-version> <jsp-version>2.1</jsp-version> <jstl-version>1.2</jstl-version> </properties> <dependencies> <!-- Spring 4 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <!-- Hibernate 4 dependencies --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>${hibernate.version}</version> </dependency> <!-- Servlet and JSP --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet-api-version}</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>${jsp-version}</version> <scope>provided</scope> </dependency> <!-- JSTL dependency --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl-version}</version> </dependency> <!-- JUnit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit-version}</version> <scope>test</scope> </dependency> <!-- External oralce jar --> <dependency> <groupId>ojdbc7</groupId> <artifactId>ojdbc7</artifactId> <version>1.0</version> </dependency> <!-- Json dependency --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.1.1</version> </dependency> <!-- Json dependency --> <!-- slf4j-log4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.1</version> </dependency> </dependencies> <build> <finalName>tests</finalName> <!-- <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <outputDirectory>D:\Newfolder\Softwares\jboss-as-7.1.1.Final\standalone\deployments</outputDirectory> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <configuration> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> </configuration> </plugin> </plugins> </build> 实体文件
-
Org.java & Users.java & UsersOrg.java
package com.tests.entity; /** * Org generated by hbm2java */ @Entity @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "orgId") public class Org implements java.io.Serializable { @Id @Column(name = "orgId") @GeneratedValue(strategy = GenerationType.IDENTITY) private BigDecimal orgId; private BigDecimal parentOrgId; private BigDecimal orgCode; private String orgName; private String description; private BigDecimal actStat; private Set<UserOrg> userOrgs = new HashSet<UserOrg>(0); public Org() { } public Org(BigDecimal orgId, BigDecimal parentOrgId, BigDecimal orgCode, String orgName, BigDecimal actStat) { this.orgId = orgId; this.parentOrgId = parentOrgId; this.orgCode = orgCode; this.orgName = orgName; this.actStat = actStat; } public Org(BigDecimal orgId, BigDecimal parentOrgId, BigDecimal orgCode, String orgName, String description, BigDecimal actStat, Set<UserOrg> userOrgs) { this.orgId = orgId; this.parentOrgId = parentOrgId; this.orgCode = orgCode; this.orgName = orgName; this.description = description; this.actStat = actStat; this.userOrgs = userOrgs; } public BigDecimal getOrgId() { return this.orgId; } public void setOrgId(BigDecimal orgId) { this.orgId = orgId; } public BigDecimal getParentOrgId() { return this.parentOrgId; } public void setParentOrgId(BigDecimal parentOrgId) { this.parentOrgId = parentOrgId; } public BigDecimal getOrgCode() { return this.orgCode; } public void setOrgCode(BigDecimal orgCode) { this.orgCode = orgCode; } public String getOrgName() { return this.orgName; } public void setOrgName(String orgName) { this.orgName = orgName; } public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } public BigDecimal getActStat() { return this.actStat; } public void setActStat(BigDecimal actStat) { this.actStat = actStat; } public BigDecimal getOrgPhone() { return this.orgPhone; } @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) // @JsonIgnore public Set<UserOrg> getUserOrgs() { return this.userOrgs; } // @ManyToOne(cascade={}, fetch=FetchType.LAZY) // @JsonIgnore public void setUserOrgs(Set<UserOrg> userOrgs) { this.userOrgs = userOrgs; } } 同Users.java & UserOrg.java[orgId,userId forgin keys]
-
休眠 hbm xml 文件 Users.hbm.xml & UserOrg.hbm.xml & Org.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated Jun 17, 2016 3:32:52 PM by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping package="com.tests.entity"> <class name="Org" table="ORG"> <id name="orgId" type="big_decimal"> <column name="ORG_ID" precision="22" scale="0" /> <generator class="increment" /> </id> <property name="parentOrgId" type="big_decimal"> <column name="PARENT_ORG_ID" precision="22" scale="0" not-null="true" /> </property> <property name="orgCode" type="big_decimal"> <column name="ORG_CODE" precision="22" scale="0" not-null="true" /> </property> <property name="orgName" type="string"> <column name="ORG_NAME" length="32" not-null="true" unique="true" /> </property> <property name="description" type="string"> <column name="DESCRIPTION" length="100" /> </property> <property name="actStat" type="big_decimal"> <column name="ACT_STAT" precision="22" scale="0" not-null="true" /> </property> <set name="userOrgs" table="USER_ORG" inverse="true" lazy="true" fetch="select"> <key> <column name="ORG_ID" precision="22" scale="0" /> </key> <one-to-many class="UserOrg" /> </set> <set name="branches" table="BRANCH" inverse="true" lazy="true" fetch="select"> <key> <column name="ORG_ID" precision="22" scale="0" not-null="true" /> </key> <one-to-many class="Branch" /> </set> <!-- <set name="users" table="USER_ORG" inverse="true" lazy="true" fetch="select"> <key> <column name="ORG_ID" precision="22" scale="0" /> </key> <many-to-many class="Users" column="USER_ID" /> </set> <set name="branches" table="BRANCH" inverse="true" lazy="false" fetch="select"> <key> <column name="ORG_ID" precision="22" scale="0" not-null="true" /> </key> <one-to-many class="Branch" /> </set> --> </class> </hibernate-mapping> -
UserOrg.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated Jun 17, 2016 3:32:52 PM by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping package="com.tests.entity"> <class name="UserOrg" table="USER_ORG"> <id name="userOrgId" type="big_decimal"> <column name="USER_ORG_ID" precision="22" scale="0" /> <generator class="assigned" /> </id> <many-to-one name="org" class="Org" fetch="select"> <column name="ORG_ID" precision="22" scale="0" /> </many-to-one> <many-to-one name="users" class="Users" fetch="select"> <column name="USER_ID" precision="22" scale="0" /> </many-to-one> </class> </hibernate-mapping> -
休眠实用程序文件
package com.tests.util; @Repository public class HibernateUtil { @Autowired private SessionFactory sessionFactory; public Object getByUserId(String userQuery, String userId) { return sessionFactory.getCurrentSession().createQuery(userQuery).setParameter("userId", userId).uniqueResult(); } } -
拦截器类
package com.tests.interceptor; public class OrganizationInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String servletPath = request.getServletPath(); if (servletPath.equals("/organization")) { return true; } return true; } } - 和其他 Service & Dao 类
-
控制器类
package com.tests.controller; @Controller @RequestMapping("organization") public class OrganizationLoginController { @SuppressWarnings("unused") private static Logger logger = LoggerFactory.getLogger(OrganizationLoginController.class); @Autowired private OrganizationService organizationService; @SuppressWarnings({ "unused", "rawtypes" }) @RequestMapping(value = { "/", "", "login" }) public @ResponseBody void organizationLogin(@RequestParam(required = false) String userName, @RequestParam(required = false) String password, HttpServletRequest request, HttpServletResponse response) { Users loginUser = organizationService.getLoginAuthentication(userName, password); if(loginUser != null){ //Do something }else{ //Do something } } } 部署项目,但运行应用程序时出现错误 [错误日志如下]
我做了很多更改,但出现相同的错误,如果使用 @JsonIgnore 则它工作正常但无法获取映射数据。
-
服务器日志
15:32:36,948 DEBUG [org.springframework.web.servlet.DispatcherServlet] (ajp-localhost-127.0.0.1-8009-1) Could not complete request: org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/codehaus/jackson/map/JsonMappingException$Reference at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505) [jbossweb-7.0.13.Final.jar:] at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:445) [jbossweb-7.0.13.Final.jar:] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_79] Caused by: java.lang.NoClassDefFoundError: org/codehaus/jackson/map/JsonMappingException$Reference at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:166) [jackson-mapper-asl-1.9.13.jar:1.9.13] at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112) [jackson-mapper-asl-1.9.13.jar:1.9.13] 请帮助我哪里做错了,我是 hibernat 的新手
- 提前致谢
【问题讨论】:
标签: spring hibernate maven spring-mvc hibernate-mapping