2012-08-14 182 views
1

我已经从一本书的例子开始。这真的是一个虚拟导向的,我对这本书给出的代码有问题。JPA JoinColumn不起作用

这是代码;

@Entity 
public class Customer { 
@Id 
@GeneratedValue 
private Long id; 
private String firstName; 
private String lastName; 
private String email; 

@OneToOne (fetch = FetchType.LAZY, 
      cascade = {CascadeType.PERSIST, CascadeType.REMOVE}) 
@JoinColumn(name = "address_fk") 
private Address address; 
//getter, setter, Constructor 

- // -------------------------------------

@Entity 
public class Address { 
@Id @GeneratedValue(strategy = GenerationType.AUTO) 
private String id; 
private String city; 
private String street; 
private String number; 

在这里,它抱怨JoinColumn注释。它说没有找到列address_fk。

这是IDE相关的问题?我错过了什么吗?

编辑:尚未在数据库中创建表格。我期待他们在DB自动被我的persistence.xml

<property name="eclipselink.ddl-generation" value="create-tables"/> 

回答

2

可以看出使用@JoinColumn批注指定国外列名是address_fk,而不是默认address_id是罚款。

什么可能不工作是@GeneratedValue与字符串。根据规范,只有生成主键的整体类型是可移植的。

+0

一些它是如何抱怨JoinColumn。当我删除它。问题解决了。老实说,现在比我之前选择的更好。 – 2012-08-14 14:59:08

+0

我也将地址的ID类型更改为Long。 – 2012-08-14 14:59:50