2012-09-05 57 views
0

我有兩個表(已創建的),說的人,並與下面的模式地址:JPA /休眠:註釋對於已經創建的表

create table Person (
    `id` int(11) not null auto_increment, 
    `name` varchar(255) default null, 
    primary key(`id`) 
) 

create table Address (
    `id` int(11) not null, 
    `city` varchar(255) default null, 
    primary key (`id`), 
    constraint foreign key (`id`) references `Person`(`id`) 
) 

現在,我應該在代碼中使用的註解?

兩個類的骨架是:

class Person { 
    @Id @GeneratedValue 
    @Column(name="id") 
    int id; 
    String name; 

    Address address; 
} 

class Address { 
    int id; 
} 

我需要在添加註釋爲地址場人類和ID的地址場。

+0

人物識別碼和地址識別碼是否一致? – RNJ

+0

是的。其實人與地址有一對一的關係。 – sachinpkale

回答

0

我想你想使用@MapsId

@Entity 
class Person { 
    @Id 
    @GeneratedValue 
    int id; 

    String name; 

    @OneToOne 
    @MapsId 
    Address address; 
} 

@Entity 
class Address { 
    @Id 
    int id; 
} 

查看@OneToOne文檔中的示例2。

0
class Person { 
    @Id @GeneratedValue 
    @Column(name="id") 
    int id; 
    String name; 

    @OneToOne 
    @JoinColumn(name = "address_id", referencedColumnName = "id") 
    Address address; 
} 

class Address { 
    @id 
    int id; 
} 
+0

不確定這將工作,因爲在模式中沒有address_id列 – RNJ

+0

我們可以在Address類中爲id字段設置列名「address_id」。它會起作用嗎? – sachinpkale

+0

@JoinColumn(name =「address_id」,referencedColumnName =「id」)表示 address_id人員表中的列將引用地址表中的id列,但是您需要在person表中創建address_id列。 – 9ine

1

在Person.java

@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
@JoinColumn(name = "id",nullable=false) 
@ForeignKey(name = "fk_id")  
private Address address; 

和地址的.java -

@OneToOne(fetch=FetchType.LAZY) 
@JoinColumn(name = "id", updatable = false, insertable = false, nullable=false) 
private Person id;  

@Column(name = "id", insertable = false, updatable = false, nullable=false) 
private Integer id; 
+0

謝謝,但我無法在Address類中添加Person字段。 – sachinpkale

+0

這裏的人代表id。我修改了這個例子,你可以再次檢查一下。在這裏我已經爲一列創建了2個映射。一個會返回id,另一個會返回Person對象。 –