Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MicronautProject中,使用hibernate规范引发异常:无法获取当前线程的事务同步会话_Java_Hibernate_Micronaut Data - Fatal编程技术网

Java 在MicronautProject中,使用hibernate规范引发异常:无法获取当前线程的事务同步会话

Java 在MicronautProject中,使用hibernate规范引发异常:无法获取当前线程的事务同步会话,java,hibernate,micronaut-data,Java,Hibernate,Micronaut Data,我在学微缩仪。当我在micronaut项目中使用hibernate时,一切正常。我在docs.micronaut.io中学习。然而,我使用规范。抛出异常: org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread at org.springframework.orm.hibernate5.SpringSessionContext.curren

我在学微缩仪。当我在micronaut项目中使用hibernate时,一切正常。我在docs.micronaut.io中学习。然而,我使用规范。抛出异常:

org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
    at org.springframework.orm.hibernate5.SpringSessionContext.currentSession(SpringSessionContext.java:143)
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:473)
    at io.micronaut.data.hibernate.operations.HibernateJpaOperations.getCurrentEntityManager(HibernateJpaOperations.java:620)
    at io.micronaut.data.spring.jpa.intercept.FindAllSpecificationInterceptor.intercept(FindAllSpecificationInterceptor.java:49)
    at io.micronaut.data.intercept.DataIntroductionAdvice.intercept(DataIntroductionAdvice.java:80)
    at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:69)
    at io.micronaut.validation.ValidatingInterceptor.intercept(ValidatingInterceptor.java:123)
    at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:69)
    at jpatest.repository.BookRepository$Intercepted.findAll(Unknown Source)

控制器 服务 Application.xml 当我使用@Transactional时,它不起作用。我确定使用

import org.springframework.transaction.annotation.Transactional;

也许我需要配置某个东西,除非您在micronaut服务中使用
micronaut data spring
,否则micronaut服务不应使用
org.springframework.transaction.annotation.Transactional
与micronaut数据一起使用,并且在您的情况下,您不必使用任何
@Transactional
注释(spring或其他)。您的
BookRepository
应自动成为事务性的。

我缺少micronaut-spring依赖项。如果我导入它,它会工作。

谢谢。我尝试在Micronaut项目中使用JPA规范。我需要导入Micronaut数据spring和org.springframework:SpringORM。在这里学习:问题提到了
Application.xml
,但随后显示了YAML代码。是
src/main/resources/application.yml
中的YAML代码吗?

@Singleton
public class BookService {
    @Inject
    BookRepository bookRepository;
    public HttpResponse findAll() {

        Specification<Book> bookSpecification = (Specification<Book>) (root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("id"),2);
        List all = bookRepository.findAll(bookSpecification);
//        Iterable<Book> all = bookRepository.findAll();
        return HttpResponse.ok(all);
    }
}

@Repository
@Transactional
public interface BookRepository extends CrudRepository<Book, Long>, JpaSpecificationExecutor<Book> {
    Book find(String title);
}
@Entity
@Table(name = "book")
public class Book implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private int pages;

    public Book(String title, int pages) {
        this.title = title;
        this.pages = pages;
    }

    public Book() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }
}

jpa:
  default:
    entity-scan:
      packages: 'jpatest.entity'
import org.springframework.transaction.annotation.Transactional;