2013-04-26 58 views
-1

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

我正尝试用主要方法中的几条记录创建表格:

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数据库经验丰富,帮我找到它为什么不能识别表/关系,并将其与错误出现:

“关系部门不存在”?

UPDATE:

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

<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/testDB</property> in cfg.xml文件。

+1

大多数人喜欢这种情况是折叠。未加引号的标识符被折叠为小写。许多访问库会自动为您引用,而像psql这样的东西不会。 – 2013-04-26 19:04:56

+0

你能澄清你的评论,并提出你的建议可以做什么?当你表达它时,我无法理解它。谢谢。 – arjacsoh 2013-04-26 19:11:59

+0

你既有'DEPARTMENT'又有'department'',他们可能都应该有相同的大小写。 – 2013-04-26 19:31:54

回答

0

如果您也有连接问题,解决这些问题的过程就是您所期望的。

  1. 检查PostgreSQL服务器正在运行
  2. 检查您可以通过psql的连接/ pgAdmin的
  3. 检查您的应用程序的连接设置是一样的,你在步骤2
  4. 用于检查的返回码您的连接呼叫
  5. 打开PostgreSQL中的连接日志记录,看看您是否得到(a)尝试和(b)出错
  6. 简化代码以找出错误的位置。

令人惊讶的时间#1或#3是原因,并且可能你没有做#4或者你没有打扰到询问其他错误。

1

开始psql your_database及发行\d看表。

我不熟悉Hibernate的,但机会是语句如@Table(name="DEPARTMENT")正在创建的居然叫"DEPARTMENT",而你的查询实际上是从DEPARTMENT查询表(不包括双引号),这样PostgreSQL将解释为department

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