Tôi đang cố gắng chạy ngủ đông trên một DB PostgreSQL 8.4.2. Bất cứ khi nào tôi cố gắng chạy một mã java đơn giản như:PSQLException: ERROR: quan hệ "TABLE_NAME" không tồn tại
List<User> users = service.findAllUsers();
tôi nhận được lỗi sau:
PSQLException: ERROR: relation "TABLE_NAME" does not exist
Kể từ khi tôi đã lựa chọn tùy chọn hibernate.show_sql thiết lập là true, tôi có thể thấy ngủ đông mà đang cố gắng để chạy các lệnh SQL sau:
select this_.USERNAME as USERNAME0_0_, this_.PASSWORD as PASSWORD0_0_
from "TABLE_NAME" this_
Khi trong thực tế, nó ít nhất nên chạy cái gì đó như:
select this_."USERNAME" as USERNAME0_0_, this_."PASSWORD" as PASSWORD0_0_
from "SCHEMA_NAME"."TABLE_NAME" as this_
Có ai biết những thay đổi nào tôi cần phải thực hiện cho Hibernate để tạo đúng SQL cho PostgreSQL không?
Tôi đã thiết lập nguồn dữ liệu PostgreSQL cần thiết trong file applicationContext.xml:
<!-- Use Spring annotations -->
<context:annotation-config />
<!-- postgreSQL datasource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url"
value="jdbc:postgresql://localhost/DB_NAME:5432/SCHEMA_NAME" />
<property name="username" value="postgres" />
<property name="password" value="password" />
<property name="defaultAutoCommit" value="false" />
</bean>
Cùng tập Tôi đã thiết lập nhà máy sản xuất phiên với PostgreSQL phương ngữ:
<!-- Hibernate session factory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>com.myPackage.dbEntities.domain.User</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- setup transaction manager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
Cuối cùng, cách tôi ánh xạ lớp miền với bảng là:
@Entity
@Table(name = "`TABLE_NAME`")
public class User {
@Id
@Column(name = "USERNAME")
private String username;
Có anyon e gặp lỗi tương tự ?. Bất kỳ trợ giúp nào trong việc giải quyết vấn đề này sẽ được đánh giá cao. Xin lưu ý rằng câu hỏi khác với bài đăng Cannot simply use PostgreSQL table name (”relation does not exist”)
Xin lỗi cho bài đăng dài.
chỉ để hỏi rõ ràng: hiện các tài khoản người dùng truy cập vào cơ sở dữ liệu đã cấp phép để xem bảng TABLE_NAME? (nếu bạn đã chỉ định lược đồ trong kết nối, nó có thể không sai để bỏ qua tên lược đồ từ chọn ngủ đông). – davek
Có, tôi trên bàn có sự cho phép sau: ALTER TABLE "SCHEMA_NAME". "TABLE_NAME" CHỦ SỞ HỮU ĐẾN; –