使用@Transactional时编译失败(value =" primary")

时间:2015-02-04 20:51:14

标签: java spring hibernate maven transactional

在pom.xml中我使用spring-tx-4.1.4.RELEASE.jar,但maven编译项目时出错:

org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标org.apache.maven.plugins:maven-compiler-plugin:2.3.2:在项目事务上编译(default-compile):编译失败 \ p4_projects \ transaction \ src \ main \ java \ com \ sick \ dao \ hibernate \ DeviceModelDaoHibernate.java:[25,15]找不到符号符号:方法值() location:@interface org.springframework.transaction.annotation.Transactional

我找不到原因。依赖关系层次结构显示所有spring依赖关系的正确版本4.1.4。我在4.1.3中得到了相同的结果。

我会感激你的帮助。
谢谢, 埃琳娜

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;

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

import com.sick.dao.DeviceModelDao;
import com.sick.model.DeviceModel;

@Repository
@Transactional(value = "primary")
public class DeviceModelDaoHibernate implements DeviceModelDao {
private SessionFactory sessionFactory;

public DeviceModelDaoHibernate() {      
}

public DeviceModelDaoHibernate(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

@Override
public void save(DeviceModel deviceModel) {
    sessionFactory.getCurrentSession().saveOrUpdate(deviceModel);
}

}

pom.xml太大了,无法在此发布,因此我只发布了依赖项的版本:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <red5-server.version>1.0.2-SNAPSHOT</red5-server.version>
    <red5-client.version>1.0.2-SNAPSHOT</red5-client.version>
    <camel.version>2.14.1</camel.version>
    <hibernate.version>4.3.8.Final</hibernate.version>
    <spring.version>4.1.4.RELEASE</spring.version>
    <spring-security.version>3.2.5.RELEASE</spring-security.version>
    <spring-integration.version>3.0.0.RELEASE</spring-integration.version>
    <slf4j.version>1.7.5</slf4j.version>
    <mina.version>2.0.7</mina.version>
    <logback.version>1.0.13</logback.version>
    <junit.version>4.10</junit.version>
    <cargo.host>localhost</cargo.host>
    <cargo.port>25888</cargo.port>
    <cargo.wait>false</cargo.wait>
    <tomcat.version>6.0.14</tomcat.version>
</properties>
....
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <type>jar</type>
    </dependency>
</dependencies>

3 个答案:

答案 0 :(得分:0)

使用Eclipse?
试试Maven clean&gt;项目清洁&gt; Maven安装。 错误确实是可疑的,我认为你没有代码问题,但有Maven。

答案 1 :(得分:0)

感谢大家,我已经解决了这个问题。在pom.xml中,我已经在org.hibernate依赖项之前放置了所有org.springframework依赖项,问题已经消失。

答案 2 :(得分:0)

同样的问题:@Transactional 错误地来自一个旧的“spring-dao”库,它是“spring-hibernate3”的传递依赖,但我希望它来自“spring-tx”。

通过在“spring-hibernate3”之前移动“spring-tx”依赖项来解决它(我想我也可以使用排除)。

使用 mvn dependency:tree 可视化传递依赖。