0

我正在尝试构建简单的弹簧安全休眠登录应用程序。但是我在使用休眠模式从数据库中获取结果时遇到问题。这是我将查询的服务类。

用户帐户服务:

package main.java.services;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import main.java.model.UserAccount;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service("userAccountService")
@Transactional
public class UserAccountService {

    private EntityManager entityManager;

    @PersistenceContext
    public void setEntityManager(EntityManager entityManager){ 
            this. entityManager = entityManager; 
        }
    public UserAccount get(Integer id)
    {
        String sql = "FROM UserAccount as ua WHERE ua.id="+id;
        Query query = entityManager.createQuery(sql);
        return (UserAccount) query.getSingleResult();
    }

    public UserAccount get(String username)
    {   
        String sql = "FROM UserAccount WHERE username='"+username+"'";
        System.out.println("test1");
        Query query = entityManager.createQuery(sql);
        System.out.println("test2");
        System.out.println(query.getSingleResult());
        return (UserAccount) query.getSingleResult();
    }

    public void add(UserAccount userAccount)
    {
        entityManager.persist(userAccount);
    }
}

我的问题是,代码将到达“test1”,但不会到达“test2”,也不会显示任何错误。我已经尝试使用本机查询,然后我将获得一个休眠 awnser 来进行控制台,但我的返回仍然没有结果(给出 0,但应该返回我一个 UserAccount 对象)。使用本机查询控制台向我展示这个“Hibernate:FROM user_account WHERE username='something'”这是我的数据库conf文件:

HibernateContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.1.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

    <context:property-placeholder location="/WEB-INF/jdbc.properties" />

    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- Declare a datasource that has pooling capabilities-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
          destroy-method="close"
          p:driverClass="${jdbc.driverClassName}"
          p:jdbcUrl="${jdbc.url}"
          p:user="${jdbc.username}"
          p:password="${jdbc.password}"
          p:acquireIncrement="5"
          p:idleConnectionTestPeriod="60"
          p:maxPoolSize="100"
          p:maxStatements="50"
          p:minPoolSize="10" />

    <!-- Declare a JPA entityManagerFactory-->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
        <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property>
        <property name="persistenceUnitName" value="hibernatePersistenceUnit" />
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" >
                <property name="databasePlatform">
                    <value>${jdbc.dialect}</value>
                </property>
                <property name="showSql" value="true"/>
            </bean>
        </property>
    </bean>

    <!-- Declare a transaction manager-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

</beans>
4

1 回答 1

0

如果执行到 linex但不是 line x+2,则 linex+1必须引发异常、无限期地阻塞/循环、强制终止线程或调用 vm 退出例程。

其中,最有可能的是它引发了异常。如果您没有看到错误,则可能有代码吞下了异常,例如:

try {
    ...
} catch {
    // Ignore exception
}

要么,要么它可能被记录在某个地方,而你没有查看日志。检查您的应用程序服务器日志以获取详细信息。你没有提到你正在使用什么应用服务器,所以我不能更具体。

如果您无法通过这种方式识别问题,请将调试器附加到您的应用程序(是的,当您的应用程序在容器/应用程序服务器中运行时,这有效)。在最后一个已知的 OK 语句处设置断点,然后单步执行代码,观察发生了什么。

于 2013-05-06T00:09:47.390 回答