Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 使用JPA引发错误的多个数据源_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java 使用JPA引发错误的多个数据源

Java 使用JPA引发错误的多个数据源,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我试图使用Springboot和JPA使用多个数据源,但在尝试启动服务器时出错 只有当我尝试使用第二个数据源时,问题才会出现。尝试启动应用程序时出现以下错误: Not an managed type: class com.company.app.backoffice.modelDocument.Category 对于第一个数据源来说,一切都很好。但我的第二个实体经理似乎没有跟踪好的包。例如,我需要第一个数据源来管理模型包,第二个数据源来管理模型文档包: <!-- Configure th

我试图使用Springboot和JPA使用多个数据源,但在尝试启动服务器时出错

只有当我尝试使用第二个数据源时,问题才会出现。尝试启动应用程序时出现以下错误:

Not an managed type: class com.company.app.backoffice.modelDocument.Category
对于第一个数据源来说,一切都很好。但我的第二个实体经理似乎没有跟踪好的包。例如,我需要第一个数据源来管理模型包,第二个数据源来管理模型文档包:

<!-- Configure the data source bean -->
<!-- Website datasource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

<!-- Doc base datasource -->
<bean id="docDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.doc.url}"/>
    <property name="username" value="${jdbc.doc.username}"/>
    <property name="password" value="${jdbc.doc.password}"/>
</bean>

<!-- Configure the entity manager factory bean -->
<!-- Website Entity manager -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.company.app.backoffice.model"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

<!-- Doc base Entity manager -->
<bean id="docEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="docDataSource"/>
    <property name="packagesToScan" value="com.company.app.backoffice.modelDocument"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

<!-- Configure the transaction manager bean -->
<!-- Website transation manager -->
<bean id="transactionManager"
      class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<!-- Doc base transaction manager -->
<bean id="docTransactionManager"
      class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="docEntityManagerFactory"/>
</bean>
@Entity
@Table(name = "category")
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column
    private String name;


    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}
有人知道这是怎么回事吗

编辑:用于管理实体持久性的隐式存储库

package com.company.app.backoffice.repository;

import com.company.app.backoffice.modelDocument.Category;
import org.springframework.data.jpa.repository.JpaRepository;

public interface CategoryRepository extends JpaRepository<Category, Long> {
}
package com.company.app.backoffice.repository;
导入com.company.app.backoffice.modelDocument.Category;
导入org.springframework.data.jpa.repository.JpaRepository;
公共接口类别repository扩展了JpaRepository{
}
编辑2:注入存储库的控制器:

@Controller
public class CategoryController {

    @Autowired
    private CategoryRepository categoryRepository;

    @RequestMapping(value = "/categories", method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public List<Category> categories() {
        return categoryRepository.findAll();
    }
}
@控制器
公共类类别控制器{
@自动连线
私人分类报告分类报告;
@RequestMapping(value=“/categories”,method=RequestMethod.GET,products=“application/json”)
@应答器
公共列表类别(){
return categoryRepository.findAll();
}
}

主要问题是您有两个不同的数据源和实体管理器与JPARepository一起工作。我想当你这样工作的时候,春天就消失了。Is只处理一个数据源/em。我已经寻找了一个解决方案,在Spring中将em/datasource设置为一个特定的JPA存储库,但我还没有找到。尽管如此,您仍可以按照此操作创建自己的JPARepository实现并定义两个类。每个人都可以使用不同的数据源和EntityManager。这样做,您应该实现您想要的。

主要问题是您有两个不同的数据源和实体管理器与JPARepository一起工作。我想当你这样工作的时候,春天就消失了。Is只处理一个数据源/em。我已经寻找了一个解决方案,在Spring中将em/datasource设置为一个特定的JPA存储库,但我还没有找到。尽管如此,您仍可以按照此操作创建自己的JPARepository实现并定义两个类。每个人都可以使用不同的数据源和EntityManager。这样做,您应该实现您想要的。

添加包含实体的包扫描

 <jpa:repositories base-package="your.package.enties" />

添加包含实体的包扫描

 <jpa:repositories base-package="your.package.enties" />

当您有多个数据源时,必须声明单独的事务管理器(
PlatformTransactionManager
)和实体管理器(
LocalContainerEntityManagerFactoryBean
)。所以Springboot被搞糊涂了。要解决此问题,请使用
@Primary
注释。将此注释放在任何一个事务管理器和任何一个实体管理器上


Cheers

当您有多个数据源时,必须声明单独的事务管理器(
PlatformTransactionManager
)和实体管理器(
LocalContainerEntityManagerFactoryBean
)。所以Springboot被搞糊涂了。要解决此问题,请使用
@Primary
注释。将此注释放在任何一个事务管理器和任何一个实体管理器上


干杯

事实上,我有两位实体经理。第一个是关于模型,第二个是关于模型文档。看看新的答案事实上,我有两个实体经理。第一个是关于模型的,第二个是关于模型文档的。看看新的答案。你能发布你的DAO吗?我不使用任何DAO。我只使用隐式JPA存储库来持久化我的实体。向我们展示它们的注入。那么你可以发布你的DAO吗?我不使用任何DAO。我只使用隐式JPA存储库来持久化我的实体