PostgreSql不“识别”由Hibernate创建的表

时间:2013-04-26 18:59:57

标签: hibernate postgresql join

我在PostgreSQL数据库中使用hibernate创建两个关联表时遇到问题。我倾向于认为问题在于数据库(配置?),因为我已经尝试了几乎所有在Internet站点中提出的Hibernate方法,并且我仍然收到相同的错误。在使用PostgreSql数据库之前是否需要任何配置?我不能用其他方式解释出现的错误:

“关系部门不存在”

我加入两个实体员工和部门如下:

@Entity
@Table(name="EMPLOYEE")
public class Employee implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="employee_id")
private Long employeeId;
.
.
.

@ManyToOne
@JoinColumn(name="department_id")
public Department getDepartment() {
    return department;
}

public void setDepartment(Department department) {
    this.department = department;
}

private Department department; 

@Entity
@Table(name="DEPARTMENT")
public class Department implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="DEPARTMENT_ID")
private Long departmentId;

.
.
.
@OneToMany(mappedBy="department")
public Set<Employee> getEmployees() {
    return employees;
}

public void setEmployees(Set<Employee> employees) {
    this.employees = employees;
}


private Set<Employee> employees;

我正在尝试使用main方法中的几个记录创建表:

SessionFactory sf = new Configuration().configure().buildSessionFactory();
        Session session = sf.openSession();
        session.beginTransaction();

        Department department = new Department();
        department.setDepartmentName("Sales");
        session.persist(department);

        Employee emp1 = new Employee("Nina", "Mayers", "111");
        Employee emp2 = new Employee("Tony", "Almeida", "222");

        emp1.setDepartment(department);
        emp2.setDepartment(department);

        session.persist(emp1);
        session.persist(emp2);

        session.getTransaction().commit();
        session.close();

错误出现在行上:session.persist(department);

是否有人在PostgreSql数据库方面有经验,帮助我找到无法识别表/关系的原因,并提出错误:

“关系部门不存在”?

更新:

我查看了日志文件。在从Eclipse发出通常的消息之后,消息的最后一行是:“由于目标机器主动拒绝它,因此无法建立连接”。我推断问题可能出在连接上。是否有任何属性,我应该设置(在pgAdmin中)以实现连接?我已经设置了

行 Eclipse中cfg.xml文件中的

<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/testDB</property>

2 个答案:

答案 0 :(得分:1)

启动psql your_database并发出\d以查看表格。

我不熟悉Hibernate,但@Table(name="DEPARTMENT")这样的语句可能正在创建实际上称为"DEPARTMENT"的表,而您的查询实际上是从DEPARTMENT查询的(没有双引号),postgresql将其解释为department

如果是这样,修复是在创建表名时使用小写,或者在查询表时使Hibernate使用双引号和大写。

答案 1 :(得分:0)

如果您还遇到连接问题,那么解决这些问题的程序就是您所期望的。

  1. 检查postgreSQL服务器是否正在运行
  2. 检查您是否可以通过psql / pgAdmin连接
  3. 检查应用程序中的连接设置是否与步骤2中使用的相同
  4. 检查连接呼叫的返回代码
  5. 打开PostgreSQL中的连接日志记录,看看是否有(a)尝试和(b)错误
  6. 简化代码以找出错误的位置。
  7. 令人惊讶的是,#1或#3的时间是原因,并且可能你没有做#4,或者你没有费心去询问另一个错误。