Java 如何在Spring boot中使用JPA中的标准?

Java 如何在Spring boot中使用JPA中的标准?,java,spring,hibernate,spring-boot,jpa,Java,Spring,Hibernate,Spring Boot,Jpa,我正在使用JPA和spring boot。我是JPA的新手。我想通过传递函数的值来检索对象。但在示例中,它是通过hibernate配置完成的。我没有在我的类路径中配置sessionfactorybean。我想使用JPA检索对象。在此示例中,它是: // Transactional for Hibernate @Transactional public class AccountDAOImpl implements AccountDAO { @Autowired private Entity

我正在使用JPA和spring boot。我是JPA的新手。我想通过传递函数的值来检索对象。但在示例中,它是通过hibernate配置完成的。我没有在我的类路径中配置sessionfactorybean。我想使用JPA检索对象。在此示例中,它是:

// Transactional for Hibernate
@Transactional
public class AccountDAOImpl implements AccountDAO {

  @Autowired
private EntityManager entityManager;
    
    @Override
    public Account findAccount(String userName) {
        Session session = sessionFactory.getCurrentSession();
        Criteria crit = session.createCriteria(Account.class);
        crit.add(Restrictions.eq("userName", userName));
        return (Account) crit.uniqueResult();
    }
}
但我在JPA中试过这样:

// Transactional for Hibernate
@Transactional
public class AccountDAOImpl implements AccountDAO {

    @Autowired
    private EntityManager em;

    @Override
    public Account findAccount(String userName) {
      CriteriaBuilder cm= em.getCriteriaBuilder();
      cm.createQuery(Account.class);
        cm.add(Restrictions.eq("userName", userName));
        return (Account) crit.uniqueResult();
    }
}
但它向我显示了一个错误,如何使用JPA传递用户名

我的pom.xml是:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ashwin</groupId>
    <artifactId>vemployee</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>vemployee</name>
    <description>Demo project for Spring Boot for offc</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Security Core -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
        </dependency>

        <!-- Spring Security Config -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
        </dependency>

        <!-- Spring Security Web -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/jstl/jstl -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- needed for jsp -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>9.0.27</version>
        </dependency>

        <!--bootsrap and jquery-->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>4.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.4.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.webjars/bootstrap-datepicker -->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap-datepicker</artifactId>
            <version>1.7.1</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4.0.0
org.springframework.boot
spring启动程序父级
2.2.1.发布
com.ashwin
雇员
0.0.1-快照
雇员
offc的弹簧靴演示项目
1.8
org.springframework.boot
spring引导启动器数据jpa
org.springframework.boot
SpringBootStarterWeb
org.springframework.security
spring安全内核
org.springframework.security
spring安全配置
org.springframework.security
spring安全网
org.springframework.boot
弹簧靴开发工具
运行时
真的
jstl
jstl
1.2
org.apache.tomcat.embed
汤姆卡特·贾斯珀
9.0.27
org.webjars
独自创立
4.3.1
org.webjars
jquery
3.4.0
org.webjars
引导数据采集器
1.7.1
文件上传
文件上传
1.4
mysql
mysql连接器java
运行时
org.springframework.boot
弹簧起动试验
测试
org.junit.vintage
朱尼特老式发动机
org.springframework.boot
springbootmaven插件
我还尝试了以下方法:

    TypedQuery<Account> query=em.createQuery("Select a from Account a where a.userName = :userName",Account.class);
      query.setParameter(1,userName);
    Account acc=query.getResultList().get(0);
    return acc;
TypedQuery query=em.createQuery(“从a账户中选择a账户,其中a.userName=:userName”,Account.class);
query.setParameter(1,用户名);
Account acc=query.getResultList().get(0);
返回acc;
但是如何在这里设置用户名呢?

试试这种方法

    CriteriaBuilder criteriaB = entityManager.getCriteriaBuilder();
    CriteriaQuery<Distance> criteriaQ = criteriaB.createQuery(Account.class);

    Root<Account> element = criteriaQ.from(Account.class);

    Predicate[]predicates = new Predicate[1];
    predicates[0]= criteriaB.equal(element.get("userName"),userName); 

    criteriaQ.multiselect(element.get(Account)).where(predicates);

    return entityManager.createQuery(criteriaQ).getSingleResult();
CriteriaBuilder-criteriaB=entityManager.getCriteriaBuilder();
CriteriaQuery criteriaQ=criteriaB.createQuery(Account.class);
根元素=criteriaQ.from(Account.class);
谓词[]谓词=新谓词[1];
谓词[0]=criteriaB.equal(element.get(“用户名”),userName);
criteriaQ.multiselect(element.get(Account)).where(谓词);
返回entityManager.createQuery(criteriaQ.getSingleResult();

您可以像这样使用JPQL

@Override
public Account findAccount(String userName) {
  return em.createQuery("select account from Account account where account.username = :username", Account.class)
        .setParameter("username", userName).getSingleResult();
}

不要。专有的Hibernate标准API已被弃用。当您需要组合动态查询时,请使用标准JPA criteria API。否则,请使用JPQL。并使用SpringDataJPA:您所需要的只是一个带有findByUserName查询的接口。阅读spring data jpa文档,因为您正在重新发明轮子。不,我不想使用spring data jpa。我想尝试这种方法。那么为什么您的依赖项中有spring data jpa?无论如何,我提供了您需要的信息:您的spring数据jpa。或JPQL查询。或者是标准的JPA标准API。只需查看最近编辑的帖子和帮助方法,即可获得JPQL和查询API的文档:。标准API的文档:。当然,还有javadoc。