相关疑难解决方法(0)

JPA和Hibernate中的LazyInitializationException

我知道这个问题在这里和互联网上已被多次询问,我已经阅读了很多这些答案,但我仍然不明白解决这个问题的正确方法.我正在尝试使用Spring MVC和JPA,每次访问一个延迟加载的属性时,我都会得到一个LazyInitializationException.

以下是我正在尝试的一些代码:

@Repository
public class MyDAO {
    private static final Logger logger = LoggerFactory.getLogger(MyDAO.class);

    @PersistenceContext
    private EntityManager em;

    @Transactional
    public void logDOI() {
        DOI myDOI = em.find(DOI.class, Long.valueOf(1));

        // This line gives the expected output
        logger.info("Fetched DOI: " + myDOI.getDoiKey());

        // This line throws the LazyInitalizationException
        for(DOIMembership m : myDOI.getDoiMemberships()) {
            logger.info("Got DOI Membership id: " + m.getId());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在访问的实体:

@Entity
@Table(name="DOI")
public class DOI implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name="DOI_ID_GENERATOR", …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa

14
推荐指数
1
解决办法
3万
查看次数

之间的关联:SpringIocContainer | ApplicationContext | 的WebApplicationContext

背景

阅读1 2 3 4 5 6链接后我得出以下结论 -

由于Spring MVC设计了standered servlets,并促进相同的功能servlet contextapplication context.在春季存在两种类型的上下文ApplicationContextWebApplicationContext-

ApplicationContext初始化ContextLoaderListener,每个应用程序的单个实例. WebApplicationContext每个人加载DispatcherServlet.

我们可以理解上面这样ApplicationContext延伸,WebApplicationContext所以ApplicationContext最终与之相关的东西都是其中的一部分WebApplicationContext.

疑惑

  1. ApplicationContextAware提供哪个context对象.

    public class SomeThing implements ApplicationContextAware{
    @Override
    public void setApplicationContext(ApplicationContext ctx) throws BeanException{
    //this context object is `ApplicationContext` or `WebApplicationContext`?
     }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. context并且container似乎是我们大多数人的同义词,我想举个例子.假设我们有两个调度程序servlet一个用于 rest和另一个用于mvc.

    第一个调度员 -

    public class …
    Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc ioc-container

11
推荐指数
1
解决办法
936
查看次数

Spring JUnit测试用例失败了

我尝试为ProductDAO类运行JUnit测试用例,这是spring Web应用程序的一部分.但它仍然失败.我不确定我的test-context.xml文件.

ProductDAOImplTest在路径中有类,src/test/java并且ProductController在栈中提到的类被保存在路径中src/main/java.

ProductDAOImplTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/test/resources/test-context.xml")
@Transactional
public class ProductDAOImplTest {

    @Autowired
    private ProductDAO productDAO;

    @Test
    public void testAdd() {
        fail("Not yet implemented");
    }

    @Test
    public void testEdit() {
        fail("Not yet implemented");
    }

    @Test
    public void testGetAll() {
        fail("Not yet implemented");
    }

    @Test
    public void testGet() {
        fail("Not yet implemented");
    }

    @Test
    public void testRemove() {
        fail("Not yet implemented");
    }

    @Test
    public void testGetByPage() {
        fail("Not yet implemented");
    }

} …
Run Code Online (Sandbox Code Playgroud)

java junit spring testcase

8
推荐指数
2
解决办法
1万
查看次数

在Spring MVC中使用Spring的DomainClassConverter的问题

我试图在我的Spring MVC项目中使用Spring的DomainClassConverter功能.(我对Spring MVC和Spring只有非常基本的知识,对于任何天真的问题都提前道歉).

来自API文档:

The DomainClassConverter allows you to use domain types in your Spring MVC controller 
method signatures directly, so that you don't have to manually lookup the instances via 
the repository: (PS: Example 1.20)
Run Code Online (Sandbox Code Playgroud)

我从上面的理解是,我不必编写finder方法,Spring提供了User对象.所以这些是我做的步骤:

包括以下XML行applicationcontext.xml.

<bean class="org.springframework.data.web.config.SpringDataWebConfiguration" />
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
    <list>
        <bean class="com.rl.userservice.controller.UserConverter"/>
    </list>
</property>
Run Code Online (Sandbox Code Playgroud)

pom.xml根据Spring Data REST文档中包含此依赖项:

<dependencies>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-rest-webmvc</artifactId>
        <version>2.0.0.BUILD-SNAPSHOT</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

我的控制器如下所示:

@Controller
@RequestMapping(value = "/api/newuser")
public class NewUserServiceController {
      @Autowired …
Run Code Online (Sandbox Code Playgroud)

data-binding spring spring-mvc spring-data spring-data-jpa

8
推荐指数
1
解决办法
3957
查看次数

通用匹配模式('/**')在过滤器链中的其他模式之前定义,导致它们被忽略

Spring Security基本示例给出了此异常.

错误:"通用匹配模式('/**')在过滤器链中的其他模式之前定义,导致它们被忽略.请检查命名空间或FilterChainProxy bean配置中的顺序"

我在同一个问题上查了很多帖子.但找不到任何解决方案.任何人都可以部署一个hello spring security吗?

我使用的是这些版本 - Spring 3.2.0.RELEASE/Spring security 3.2.0.RELEASE/Tomcat 7/Java 1.7.

这是我的代码:

web.xml中

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Spring security sample Web Application</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-context.xml,
            /WEB-INF/security-context.xml</param-value>
    </context-param>

    <!-- Spring security -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>spring-dispatcher-servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-context.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring-dispatcher-servlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
Run Code Online (Sandbox Code Playgroud)

弹簧的context.xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">

    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user …
Run Code Online (Sandbox Code Playgroud)

spring-security java-7 tomcat7

8
推荐指数
1
解决办法
1万
查看次数

Spring Bean自动装配错误

我正在尝试在我的应用程序中实现电子邮件功能,但我一直在努力

No matching bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] found for dependency:  expected at least 1 bean which qualifies as autowire candidate for this dependency.
Run Code Online (Sandbox Code Playgroud)

谁能指出我做错了什么?

bean的xml配置是:

<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"   
xsi:schemaLocation="
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<context:annotation-config/>
//...other stuff

<beans:bean id="mailSession" class="org.springframework.jndi.JndiObjectFactoryBean">
    <beans:property name="jndiName" value="EmailServer" />
</beans:bean>

<beans:bean id="emailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <beans:property name="session" ref="mailSession"/>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)

EmailServiceImpl类:

@Service
public class EmailServiceImpl implements EmailService {

    @Autowired
    private JavaMailSenderImpl emailSender; 

    //more code..
}
Run Code Online (Sandbox Code Playgroud)

project_structure

java spring autowired

6
推荐指数
1
解决办法
1万
查看次数

我们什么时候在Spring中使用applicationContext.xml?

我们为什么需要applicationContext.xml在Spring?

在什么情况下我们会使用它?你有一个例子吗?

applicationContext.xml和之间有什么区别spring-servlet.xml

我们如何applicationContext.xml在Spring中与Struts.xmlStruts进行比较以便于理解?

java spring spring-mvc

5
推荐指数
1
解决办法
1万
查看次数

即使在日志中看到“添加事务方法”,方法也不会被事务顾问拦截

我有一个@Transactional @Controller,但它的方法正在被 Spring MVC 框架调用而没有事务。在异常跟踪中,我没有找到拦截调用的事务顾问:

org.hibernate.HibernateException: No Session found for current thread
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:106)
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)
org.example.businesslogic.MyController.userLoggedIn(SwiperRest.java:48)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
Run Code Online (Sandbox Code Playgroud)

另一方面,日志清楚地表明控制器方法被检测为事务性的:

DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'
DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'metaDataSourceAdvisor'
DEBUG o.s.t.a.AnnotationTransactionAttributeSource - Adding transactional method 'MyController.userLoggedIn' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
DEBUG o.s.a.f.a.InfrastructureAdvisorAutoProxyCreator - Creating implicit proxy for bean 'myController' with 0 common interceptors and 1 specific interceptors
DEBUG o.s.a.f.CglibAopProxy …
Run Code Online (Sandbox Code Playgroud)

java spring transactions spring-mvc spring-jdbc

5
推荐指数
1
解决办法
2191
查看次数

忽略了spring mvc中的安全注释

我正在尝试配置spring安全注释,我已经设法在xml中设置spring安全配置(由intercept-url元素配置),但现在我想在我的bean中使用安全注释.但是在尝试访问安全控制器方法而没有记录时,完全忽略了安全注释.这是我的控制器bean:

package com.bill.controllers;

import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MainController {

    @Secured({"ROLE_USER"})
    @RequestMapping("/index.html")
    public String main(ModelMap model) {
        model.addAttribute("test", "test");

        return "main";
    }
}
Run Code Online (Sandbox Code Playgroud)

和登录控制器:

package com.bill.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LoginController {

    @RequestMapping("/login")
    public String login(ModelMap model) {
        return "login";
    }
}
Run Code Online (Sandbox Code Playgroud)

和配置:web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>tests</display-name>

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring-servlet.xml, …
Run Code Online (Sandbox Code Playgroud)

java security spring annotations spring-mvc

4
推荐指数
1
解决办法
3130
查看次数

Spring注入具体类而不是代理

我有一个问题,Spring将DAO对象的代理注入到服务中,但是这个服务被注入到控制器中它是具体的类.这不允许我使用服务范围的事务并分别为每个DAO调用启动事务.这是我期望的行为.

组态:

Controller是带有@Controller注释和构造函数DI的类.

服务:

@Component
@Transactional
public class UserServiceImpl implements UserService { ...}

道:

@Component
@Transactional
public class UserDaoImpl implements UserDao {

JPA配置:

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

<bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
    <property name="dataSource" ref="dataSource"/>
    <property name="persistenceUnitName" value="xxxPersistenceUnit"/>
    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        </bean>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
        </props>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven />
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么会这样?

java spring jpa

4
推荐指数
1
解决办法
1772
查看次数

上下文:applicationContext.xml 和 dispatcher-servlet.xml 中的组件扫描

我创建了一个使用一些 Autowired 字段的 servlet 过滤器。为了使它工作,我DelegatingFilterProxy在 web.xml 中声明了它。在此过滤器之前,我的整个 spring 配置都在,dispatcher-servlet.xml但由于某种原因,此过滤器的声明 bean 在 dispacher-servlet 中不起作用。所以,我在applicationContext.xml. 然后它开始工作,但过滤器内的 Autwired 字段然后抛出null. 为了解决它,我移动了

<context:component-scan base-package="com.myproj.abc" />
Run Code Online (Sandbox Code Playgroud)

到 applicationContext,过滤器开始工作,但我的控制器类定义的 url 路径不再映射。所以我还需要在 applicationContext 中拉出以下两行

<mvc:default-servlet-handler />    
<mvc:annotation-driven />
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题。但我想知道这是所有这些代码的正确位置吗?因为 Spring 安全性以及静态资源和视图映射所有这些代码都在调度程序中。在我的另一个项目中,我遇到了同样的问题,我确实这样做了,仅在 applicationContext 中声明了以下行

<context:component-scan base-package="com.myproj.abc" />
Run Code Online (Sandbox Code Playgroud)

在调度程序 servlet 中,我将组件扫描包更改为仅控制器,并将所有其他代码仅保留在那里(在调度程序中)

 <context:component-scan base-package="com.myproj.abc.controller" />
Run Code Online (Sandbox Code Playgroud)

任何人都可以请教我这种混乱。

spring spring-mvc

0
推荐指数
1
解决办法
3771
查看次数