PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Thiếu bảng trên chế độ xem cụ thể hóa

Tôi đã có cùng một lỗi trong vài ngày qua. Như câu trả lời này cho biết, có thể tắt hibernate.hbm2ddl.auto thuộc tính trong persistence.xml của bạn , nhưng không phải là ý kiến ​​hay nếu dự án của bạn đang phát triển nhanh chóng.

TL; DR: đặt thuộc tính hibernate.hbm2dll.extra_physical_table_types thành MATERIALIZED VIEW .

Hoặc thêm -Dhibernate.hbm2dll.extra_physical_table_types="MATERIALIZED VIEW" đến các tùy chọn VM. Nhưng tốt hơn là các tùy chọn như vậy đối với tệp cấu hình.

Hiện tại, chúng tôi đang sử dụng PostgreSQL 9.6 và Hibernate 5.2.12.Final. Tại sao, tất cả các lần xác thực chế độ xem cụ thể hóa đều không thành công với ngoại lệ sau:

Tất cả các thực thể đã vượt qua xác thực thành công đều là bảng hoặc dạng xem đơn giản.

Có vẻ như nó là một hành vi mặc định cho cơ sở dữ liệu chung. Trong các nguồn tại đây trên các dòng 79-81 họ chỉ thêm các loại sau:

final List<String> tableTypesList = new ArrayList<>();
tableTypesList.add( "TABLE" );
tableTypesList.add( "VIEW" );

Các dòng 85-87 cho chúng tôi biết rằng có khả năng mở rộng các giá trị được mã hóa cứng này bằng các giá trị tùy chỉnh:

if ( extraPhysicalTableTypes != null ) {
    Collections.addAll( tableTypesList, extraPhysicalTableTypes );
}

Trên dòng 56 nó được khai báo private String[] extraPhysicalTableTypes; và trên các dòng 71-77 có một số giá trị khác được thêm vào mảng này:

if ( !"".equals( extraPhysycalTableTypesConfig.trim() ) ) {
    this.extraPhysicalTableTypes = StringHelper.splitTrimmingTokens(
        ",;",
        extraPhysycalTableTypesConfig,
        false
    );
}

Chúng đến từ các dòng 66-70 , được mã hóa dưới dạng Chuỗi trong khóa EXTRA_PHYSICAL_TABLE_TYPES với giá trị mặc định trống:

final String extraPhysycalTableTypesConfig = configService.getSetting(
    AvailableSettings.EXTRA_PHYSICAL_TABLE_TYPES,
    StandardConverters.STRING,
    ""
);

tại đây trên dòng 1545 là khai báo của khóa đó:

/**
 * Identifies a comma-separate list of values to specify extra table types,
 * other than the default "TABLE" value, to recognize as defining a physical table
 * by schema update, creation and validation.
 *
 * @since 5.0
 */
String EXTRA_PHYSICAL_TABLE_TYPES = "hibernate.hbm2dll.extra_physical_table_types";

Vì vậy, việc thêm thuộc tính này sẽ thêm một mục nhập khác vào tableTypesList được sử dụng để lọc nhiều thực thể khác trong cơ sở dữ liệu, chẳng hạn như chuỗi, chỉ số, bảng tạm thời và những thực thể khác, có thể có tên tương tự như chế độ xem cụ thể hóa của bạn.

Đây là cách persistence.xml của tôi trông giống như, nếu bạn quan tâm:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
    <persistence-unit name="project-pu">
        <jta-data-source>java:jboss/datasources/project-pu</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.spatial.dialect.postgis.PostgisPG95Dialect"/>
            <property name="hibernate.hbm2ddl.auto" value="validate"/>
            <property name="hibernate.hbm2dll.extra_physical_table_types" value="MATERIALIZED VIEW"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="false"/>
            <property name="hibernate.use_sql_comments" value="false"/>
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/mgt"/>
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
        </properties>
    </persistence-unit>
</persistence>

P.S. Tôi biết đó là một bài viết rất cũ, nhưng tôi đã chiến đấu với vấn đề này trong vài ngày. Tôi không tìm được câu trả lời, vì vậy tôi quyết định đưa nó vào một nơi nào đó trên Internet. Và điều này ở đâu đó đã trở thành ở đây. :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. vấn đề với mã hóa khi nhập json vào Postgres

  2. Cách hoạt động của Cotd () trong PostgreSQL

  3. Các bảng đủ điều kiện của lược đồ với SQLAlchemy, SQLite và Postgresql?

  4. thiếu mục nhập mệnh đề FROM cho bảng

  5. PostgreSQL:CHÈN đa năng