intellij-idea @在类路径中找不到事务注解

vnjpjtjt  于 2022-11-01  发布在  其他
关注(0)|答案(2)|浏览(294)

@ IntelliJ中无法识别事务性注解我尝试搜索并添加Maven依赖项,但它仍然不起作用。还尝试关闭、清除应用缓存并导入项目的pom,但不起作用...
谢谢你的帮助!
code preview

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

import java.util.List;

@Repository
@Transactional
public class UsuarioDaoImp implements UsuarioDao {
    @Override
    public List<Usuario> getUsuarios() {
        return null;
    }
}

Error on annotationmaven dependency add, clicking on the one shown doesn't really add it

<?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.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.potencialaboral</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.22</version>
        </dependency>

    </dependencies>

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

</project>
goucqfw6

goucqfw61#

要按类查找库,您可以在Maven Search中搜索fc:[class name],下面是一个搜索@Transactional。不幸的是,每个库都有很多版本,因此输出太大。但最终还是可以找到依赖项:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-tx</artifactId>
  <version>5.3.22</version>
</dependency>

注意事项:
1.要使@Transactional正常工作,您需要声明Spring的TransactionManager bean。您可以通过调试代码,在事务逻辑中放置断点,并查看堆栈跟踪中是否有事务代理,来检查事务逻辑是否正常工作。
1.我们通常不希望我们的Dao/Repository层是事务性的。事务通常从服务层开始,因为它们可能包含不止一个对Dao/Repository的调用。但是你可以通过把这个放在Dao/Repository类上来确保一个事务是 * 必需的 * 在服务层开始的:

import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.MANDATORY)
public class UsuarioDaoImp implements UsuarioDao {}
dtcbnfnu

dtcbnfnu2#

在不查看pom.xml的情况下,假设您已经配置了所需的正确依赖关系,我的建议是尝试使Intellij Idea缓存无效,重新启动IDE,然后再次重新加载maven依赖关系。
编辑:您提供的pom.xml看起来没有提供@Transactional注解的导入依赖项,此注解来自Spring Transaction依赖项
您可以在您POM中手动添加spring-tx依赖关系,或者您可以使用Spring Boot Starter Data JPA,它也使用此依赖关系

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

请注意,spring Boot starter data jpa提供了比处理事务更多的功能,它是应用程序的数据访问层的一个抽象,在其中您可以很容易地在代码中实现。

相关问题