2016-06-30 3 views
0

私は2つのデータソース、 で春-データ-JPAを使用したが、私の2スキーマelettroforesiとcapillareの両方がテーブルANALISI春データ-JPA同じテーブル名2つのデータソースの「重複した実体名」

を持っていることだし、

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

コンフィグ次のとおりです:

@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; 
    } 

} 

次のエラーが私を見るECLIPSEエンティティながら
@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; 

    ... 

} 

答えて

0

はあなたのエンティティが両方Analisi命名されているが、Capillareに2つ目の1に変更してみてください。 テーブルに名前を付けましたが、名前はAnalisiとなります。

+0

テーブルはAnalisiです。スキーマはCapillareです。私が使用している場合でも別のエンティティまたはテーブル名を使用するように注意しなければなりません。異なるスキーマ – Etantonio

+0

私にとって、エラーはかなり明確です。エンティティ名は一意でなければなりません。だから多分2つのエンティティに違った名前をつけることができます。たとえば、最初のエンティティクラスにElettroforesiAnalisi、2番目にCapillareAnalisiという名前を付けることができます。私の知る限り、データベース内のテーブルを見つけるために重要なことは、正しいテーブル名(およびあなたの場合はスキーマ)を持つ@Table注釈であり、クラス名ではありません。したがって、注釈にテーブル名を指定してください。名前付きクエリを 'SELECT a FROM CapillareAnalisi a'のように変更する必要があります。それが動作する場合私に教えてください – amicoderozer

+0

はい、それはOKです!おかげで – Etantonio

関連する問題