gpt4 book ai didi

java - 添加@Transactional 注释后注入(inject)停止

转载 作者:行者123 更新时间:2023-12-03 19:35:00 24 4
gpt4 key购买 nike

我创建了一个可以轻松添加和更新员工的类。我已将 @Transactional 注释添加到 createEmployee 方法,然后我的实例在我尝试检索数据时开始出错。

    @Transactional
@Override
public void createEmployee(Employee employee) {
internalCreateEmployee(employee);
}

没有@Transactional 一切正常,但我可以将任何东西保存到数据库中。当我添加这个注释时,我得到了这个错误。

java.lang.IllegalAccessError: tried to access method rd.EmployeeManagerImpl.(Lrd./EmployeeDao;Lrd./DepartmentDao;)V from class rd.EmployeeManagerImpl$$EnhancerByGuice$$5db9fd74

在 EmployeemanagerImpl 中,我还在构造函数中注入(inject)了我的 DAO 对象。

    @Inject
EmployeeManagerImpl(EmployeeDao employeeDao, DepartmentDao departmentDao){
this.employeeDao = employeeDao;
this.departmentDao = departmentDao;
}

@Transactional 破坏事物的原因是什么?

我只是不知道需要提供哪些信息,如果您需要任何进一步的信息,请询问。

注意:Employee 是一个 hibernate 实体类。 EmployeeDaoDepartmentDaoEmployeeManagerImpl 都有@Singleton 注解。

注2:在堆栈跟踪中,EmployeeManager 实例似乎无法初始化。

com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:987)
com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1009)
org.apache.wicket.guice.GuiceProxyTargetLocator.locateProxyTarget(GuiceProxyTargetLocator.java:105)
org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:430)
com.sun.proxy.$Proxy133.getDepartmentList(Unknown Source)
rd.EmployeeFormComponent.addDepartmentDropDown(EmployeeFormComponent.java:59)
rd.EmployeeFormComponent.<init>(EmployeeFormComponent.java:47)
rd.EmployeeAddPanel.<init>(EmployeeAddPanel.java:61)
rd.EmployeeAddModalWindow$1.<init>(EmployeeAddModalWindow.java:20)
rd.EmployeeAddModalWindow.<init>(EmployeeAddModalWindow.java:20)
rd.ManageEmployeePage$1.<init>(ManageEmployeePage.java:49)
rd.ManageEmployeePage.<init>(ManageEmployeePage.java:49)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:526)

最佳答案

如果您两次注入(inject) EmployeeManager,那可能就是问题所在。我猜测 EmployeeFormComponent 是一个 Wicket Component。 Wicket 的组件有自己的 Guice 注入(inject)器。因此,如果您使用 @Inject 注入(inject)您的 EmployeeManager 并且您尝试尝试注入(inject)其他东西,这意味着您注入(inject)了两次。这可能会导致这样的问题。

关于java - 添加@Transactional 注释后注入(inject)停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43093576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com