Spring-data-jpa在两个数据源上的相同表名“Duplicate entity name”

时间:2016-06-30 13:00:17

标签: spring-data-jpa

我正在使用带有两个数据源的spring-data-jpa, 但我的两个架构elettroforesi和capillare都有一个表ANALISI

和Eclipse向我显示以下错误:

"Duplicate entity name "Analisi" found in the persistence unit. Entity names must be unique."

Config如下:

@Configuration
@PropertySource({ "classpath:persistence-multiple-db.properties" })
@EnableTransactionManagement
@EnableJpaRepositories(
        basePackages = "com.interlabsrl.elfolab.persistence.multiple.repository.elettroforesi", 
        entityManagerFactoryRef = "elettroforesiEntityManager", 
        transactionManagerRef = "elettroforesiTransactionManager")
@ComponentScan(basePackages={"com.interlabsrl.elfolab.controller",
        "com.interlabsrl.elfolab.persistence.multiple.service", 
        "com.interlabsrl.elfolab.persistence.multiple.cache"})
public class ElettroforesiConfig {

    @Autowired
    private Environment env;

    public ElettroforesiConfig() {
        super();
    }

    @Bean
    @Primary
    public LocalContainerEntityManagerFactoryBean elettroforesiEntityManager() {
        final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setPersistenceUnitName("elettroforesi");
        em.setDataSource(elettroforesiDataSource());
        em.setPackagesToScan(new String[] { "com.interlabsrl.elfolab.persistence.multiple.model.elettroforesi" });
        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        final HashMap<String, Object> properties = new HashMap<String, Object>();
        properties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
        properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
        properties.put("hibernate.format_sql", env.getProperty("hibernate.format_sql"));
        properties.put("hibernate.jdbc.batch_size", env.getProperty("hibernate.jdbc.batch_size"));
        em.setJpaPropertyMap(properties);
        return em;
    }

    @Bean
    @Primary
    public DataSource elettroforesiDataSource() {
        final DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName")));
        dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("elettroforesi.jdbc.url")));
        dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("elettroforesi.jdbc.user")));
        dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("elettroforesi.jdbc.pass")));
        return dataSource;
    }

    @Bean
    @Primary
    public PlatformTransactionManager elettroforesiTransactionManager() {
        final JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(elettroforesiEntityManager().getObject());
        return transactionManager;
    }

}

@Configuration
@PropertySource({ "classpath:persistence-multiple-db.properties" })
@EnableTransactionManagement
@EnableJpaRepositories(
        basePackages = "com.interlabsrl.elfolab.persistence.multiple.repository.capillare", 
        entityManagerFactoryRef = "capillareEntityManager", 
        transactionManagerRef = "capillareTransactionManager")
@ComponentScan(basePackages={"com.interlabsrl.elfolab.controller",
//      , "com.interlabsrl.elfolab.persistence.multiple.service" 
//      "com.interlabsrl.elfolab.persistence.multiple.cache"
        })
public class CapillareConfig {

    @Autowired
    private Environment env;

    public CapillareConfig() {
        super();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean capillareEntityManager() {
        final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setPersistenceUnitName("capillare");
        em.setDataSource(capillareDataSource());
        em.setPackagesToScan(new String[] { "com.interlabsrl.elfolab.persistence.multiple.model.capillare" });
        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        final HashMap<String, Object> properties = new HashMap<String, Object>();
        properties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
        properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
        properties.put("hibernate.format_sql", env.getProperty("hibernate.format_sql"));
        properties.put("hibernate.jdbc.batch_size", env.getProperty("hibernate.jdbc.batch_size"));
        em.setJpaPropertyMap(properties);
        return em;
    }

    @Bean
    public DataSource capillareDataSource() {
        final DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName")));
        dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("capillare.jdbc.url")));
        dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("capillare.jdbc.user")));
        dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("capillare.jdbc.pass")));
        return dataSource;
    }

    @Bean
    public PlatformTransactionManager capillareTransactionManager() {
        final JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(capillareEntityManager().getObject());
        return transactionManager;
    }

}

而实体:

package com.interlabsrl.elfolab.persistence.multiple.model.elettroforesi;

@Entity
@NamedQueries({
    @NamedQuery(name = "Analisi.findAll", query = "SELECT a FROM Analisi a")})
@Table(schema="elettroforesi")
public class Analisi implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_ANALISI", nullable = false)
    private Integer idAnalisi;
    @Basic(optional = false)
    @NotNull
    @Column(nullable = false)
    private short tracciato;
    @Size(max = 30)
    @Column(length = 30)
    private String campione;
    @Size(max = 40)
    @Column(length = 40)
    private String reparto;
    @Column(name = "TOTALE_PROTEINE", precision = 12)
    private Float totaleProteine;
    @Column(name = "RAPP_AG", precision = 12)
    private Float rappAg;
    @Column(name = "DATA_MODIFICA")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataModifica;
    @Column(name = "DATA_VALIDAZIONE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataValidazione;
    @Column(name = "DATA_CANCELLAZIONE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataCancellazione;
    @OneToMany(mappedBy = "idAnalisiLink")
    private Collection<Analisi> analisiCollection;
    @JoinColumn(name = "ID_ANALISI_LINK", referencedColumnName = "ID_ANALISI")
    @ManyToOne
    private Analisi idAnalisiLink;
    @JoinColumn(name = "ID_ANALISI_IFE", referencedColumnName = "ID_ANALISI_IFE")
    @ManyToOne
    private AnalisiIfe idAnalisiIfe;
    @JoinColumn(name = "ID_ANALISI_NOTA", referencedColumnName = "ID_ANALISI_NOTA")
    @ManyToOne
    private AnalisiNota idAnalisiNota;
    @JoinColumn(name = "ID_PATOLOGICO", referencedColumnName = "ID_PATOLOGICO")
    @ManyToOne
    private Patologico idPatologico;
    @JoinColumn(name = "ID_PAZIENTE", referencedColumnName = "ID_PAZIENTE", nullable = false)
    @ManyToOne(optional = false)
    private Paziente idPaziente;
    @JoinColumn(name = "ID_SESSIONE", referencedColumnName = "ID_SESSIONE", nullable = false)
    @ManyToOne(optional = false)
    private Sessione idSessione;
    @JoinColumn(name = "ID_TIPO_VALIDAZIONE", referencedColumnName = "ID_TIPO_VALIDAZIONE", nullable = false)
    @ManyToOne(optional = false)
    private TipoValidazione idTipoValidazione;
    @JoinColumn(name = "ID_UTENTE_CANCELLAZIONE", referencedColumnName = "ID_UTENTE")
    @ManyToOne(fetch=FetchType.LAZY)
    private Utente idUtenteCancellazione;
    @JoinColumn(name = "ID_UTENTE_MODIFICA", referencedColumnName = "ID_UTENTE")
    @ManyToOne(fetch=FetchType.LAZY)
    private Utente idUtenteModifica;
    @JoinColumn(name = "ID_UTENTE_VALIDAZIONE", referencedColumnName = "ID_UTENTE")
    @ManyToOne(fetch=FetchType.LAZY)
    private Utente idUtenteValidazione;
    @OneToMany(mappedBy = "idAnalisi", fetch=FetchType.LAZY)
    private Collection<AnalisiFrazione> analisiFrazioneCollection;
    @OneToMany(mappedBy = "idAnalisi", fetch=FetchType.LAZY)
    private Collection<AnalisiAntisiero> analisiAntisieroCollection;
    @OneToMany(mappedBy = "idAnalisi", fetch=FetchType.LAZY)
    private Collection<AnalisiSmc> analisiSmcCollection;
    @OneToMany(mappedBy = "idAnalisi", fetch=FetchType.LAZY)
    private Collection<AnalisiCampoFree> analisiCampoFreeCollection;
    @OneToMany(mappedBy = "idAnalisi", fetch=FetchType.LAZY)
    private Collection<AnalisiDati>     analisiDatiCollection;
    @OneToMany(mappedBy = "idAnalisi")
    private Collection<AnalisiNefelometrico> analisiNefelometricoCollection;    

...

}

package com.interlabsrl.elfolab.persistence.multiple.model.capillare;

...

@Entity
@NamedQueries({
    @NamedQuery(name = "Analisi.findAll", query = "SELECT a FROM Analisi a")})
@Table(schema="capillare")
public class Analisi implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(nullable = false)
    private Long id;
    @Column(name = "id_macchina")
    private Integer idMacchina;
    @Column(name = "id_metodiche")
    private Integer idMetodiche;
    @Column(name = "numero_sessione")
    private Integer numeroSessione;
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataora;
    @Temporal(TemporalType.DATE)
    private Date data;
    @Size(max = 20)
    @Column(name = "barcode_provetta", length = 20)
    private String barcodeProvetta;
    @Size(max = 20)
    @Column(name = "barcode_rack", length = 20)
    private String barcodeRack;
    @Size(max = 100)
    @Column(name = "dati_lettura", length = 100)
    private String datiLettura;
    private Short acquisito;

    ...

}

1 个答案:

答案 0 :(得分:0)

您的实体都被命名为Analisi,尝试将第二个更改为Capillare。 您将表命名为Capillare,但该类名为Analisi