【问题标题】:Getting entityManageFactory error. Schema-validation: missing table [hibernate_sequence]获取 entityManageFactory 错误。模式验证:缺少表 [hibernate_sequence]
【发布时间】:2022-01-01 16:28:06
【问题描述】:

我有 2 个数据库。一个已设置并且可以正常工作。添加第二个数据库后,出现以下错误 entityManageFactory 错误。架构验证:缺少表 [hibernate_sequence]。

我的数据库架构如下所示:数据库架构截图

我有两个表的两个类:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity(name = "nightly_rate_amounts")
@Table(name = "nightly_rate_amounts")
public class BookedNightlyRate {
@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "bnr_meta_id")
    private Long id;
    @Column(name = "unit_uuid")
    private UUID unitUuid;
    private LocalDate firstLiveDate;
    private LocalDate date;
    private BigDecimal amount;
    @Column(name = "currency_code")
    private String currencyCode;

    public ImmutableTriple<UUID, LocalDate, String> toUnitDateCurrencyKey() {
        return new ImmutableTriple<>(unitUuid, date, currencyCode);
    }

    public ImmutablePair<UUID, String> toUnitCurrencyKey() {
        return new ImmutablePair<>(unitUuid, currencyCode);
    }
}

和:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity(name = "unit_attributes")
@Table(name = "unit_attributes")
public class BookedUnitAttributes {
    @Id
    @Column(name = "unit_uuid")
    private UUID unitUuid;
    @Column(name = "first_date_available")
    private LocalDate firstLiveDate;
}

和存储库文件:

public interface BookedNightlyRatesDao extends CrudRepository<BookedNightlyRate, Long> {

@Query(value = "SELECT DISTINCT bnr.unit_uuid as unitUuid, bnr.date, bnr.amount, bnr.currency_code as currencyCode " +
        "FROM nightly_rate_amounts AS bnr " +
        "WHERE bnr.unit_uuid IN (<unitUuids>) AND (bnr.date BETWEEN :fromDate AND :toDate)", nativeQuery = true)
List<BookedNightlyRate> findBookedNightlyRates(@Param("unitUuids") List<String> unitUuids, @Param("fromDate") LocalDate fromDate, @Param("toDate") LocalDate toDate);

@Query(value = "SELECT DISTINCT opb.unit_uuid as unitUuid, opb.date, opb.amount, opb.currency_code as currencyCode " +
        "FROM opb_nightly_rate_amounts AS opb " +
        "JOIN opb_sync_enabled_for_unit AS sync ON opb.unit_uuid = sync.unit_uuid WHERE sync.enabled = 1 AND opb.is_active = 1 " +
        "AND sync.unit_uuid IN (<unitUuids>) AND (opb.date BETWEEN :fromDate AND :toDate)", nativeQuery = true)
List<BookedNightlyRate> findOPBRates(@Param("unitUuids") List<String> unitUuids, @Param("fromDate") LocalDate fromDate, @Param("toDate") LocalDate toDate);
}

第二个界面:

public interface BookedUnitAttributesDao extends CrudRepository<BookedUnitAttributes, UUID> {

@Query(value = "SELECT ua.unit_uuid as unitUuid, ua.first_date_available as firstLiveDate " +
        "FROM unit_attributes AS ua " +
        "WHERE ua.unit_uuid IN (<unitUuids>)", nativeQuery = true)
List<BookedUnitAttributes> findUnitAttributes(@Param("unitUuids") List<String> unitUuids);
}

我正在将我的数据库从 jdbi 重写为 jpa。所以数据类没有任何注释,我重构了我的模型文件关于它在存储库文件中的查询。

【问题讨论】:

    标签: java spring hibernate spring-data-jpa


    【解决方案1】:

    由于您添加了两个数据库,Spring 不知道它连接的是哪种数据库。您必须准确显示要连接的数据库类型。 您可能会配置与两个不同数据库的连接,这里是使用 JdbcTemplate 连接的示例。

    @Configuration
    @ComponentScan("uz.dbo.dbocallcenter")
    @PropertySource("classpath:database.properties")
    public class Config2 {
    
        @Autowired
        Environment environment;
    
        private final String DRIVER = "driver";
        private final String URL1 = "url1";
        private final String USER1 = "dbusername1";
        private final String PASSWORD1 = "dbpassword1";
        private final String URL2 = "url2";
        private final String USER2 = "dbusername2";
        private final String PASSWORD2 = "dbpassword2";
    
    
        private DataSource dataSource1() {
            return getDataSource(URL1, USER1, PASSWORD1);
        }
        private DataSource dataSource2() {
            return getDataSource(URL2, USER2, PASSWORD2);
        }
    
        private DataSource getDataSource(String url1, String user1, String password1) {
            DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
            driverManagerDataSource.setUrl(environment.getProperty(url1));
            driverManagerDataSource.setUsername(environment.getProperty(user1));
            driverManagerDataSource.setPassword(environment.getProperty(password1));
            driverManagerDataSource.setDriverClassName(environment.getProperty(DRIVER));
            return driverManagerDataSource;
        }
    
    
    
    
        @Bean(name = "jdbcTemplate2")
        public JdbcTemplate jdbcTemplate2() {
            return new JdbcTemplate(dataSource2());
        }
        @Bean(name = "jdbcTemplate1")
        public JdbcTemplate jdbcTemplate1() {
            return new JdbcTemplate(dataSource1());
        }
    
    }
    

    您必须与 JpaRepository 连接有关。更准确地说,您可以获得有关此来源的知识

    https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference

    这里也很好地解释了如何在一个spring boot项目中连接两个不同的数据库

    https://www.baeldung.com/spring-data-jpa-multiple-databases

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 2017-02-02
      • 2017-11-12
      • 2019-01-20
      • 2013-01-11
      • 2018-01-21
      • 2013-01-31
      • 1970-01-01
      相关资源
      最近更新 更多