JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-004嵌套组件的注解AttributeOverrides

一、数据库

二、代码

1.

 1 package org.jpwh.model.advanced;
 2 
 3 import javax.persistence.AttributeOverride;
 4 import javax.persistence.AttributeOverrides;
 5 import javax.persistence.Column;
 6 import javax.persistence.Embeddable;
 7 import javax.validation.constraints.NotNull;
 8 
 9 @Embeddable
10 public class Address {
11 
12     @NotNull
13     @Column(nullable = false)
14     protected String street;
15 
16     @NotNull
17     @AttributeOverrides(
18         @AttributeOverride(
19             name = "name",
20             column = @Column(name = "CITY", nullable = false)
21         )
22     )
23     protected City city;
24 
25     public String getStreet() {
26         return street;
27     }
28 
29     public void setStreet(String street) {
30         this.street = street;
31     }
32 
33     public City getCity() {
34         return city;
35     }
36 
37     public void setCity(City city) {
38         this.city = city;
39     }
40 
41     // ...
42 }

 

2.

 1 package org.jpwh.model.advanced;
 2 
 3 import javax.persistence.Column;
 4 import javax.persistence.Embeddable;
 5 import javax.validation.constraints.NotNull;
 6 
 7 @Embeddable
 8 public class City {
 9 
10     @NotNull
11     @Column(nullable = false, length = 5) // Override VARCHAR(255)
12     protected String zipcode;
13 
14     @NotNull
15     @Column(nullable =  false)
16     protected String name;
17 
18     @NotNull
19     @Column(nullable =  false)
20     protected String country;
21 
22     public String getZipcode() {
23         return zipcode;
24     }
25 
26     public void setZipcode(String zipcode) {
27         this.zipcode = zipcode;
28     }
29 
30     public String getName() {
31         return name;
32     }
33 
34     public void setName(String name) {
35         this.name = name;
36     }
37 
38     public String getCountry() {
39         return country;
40     }
41 
42     public void setCountry(String country) {
43         this.country = country;
44     }
45 
46     // ...
47 }

 

3.

 1 package org.jpwh.model.advanced;
 2 
 3 import org.jpwh.model.Constants;
 4 
 5 import javax.persistence.Entity;
 6 import javax.persistence.GeneratedValue;
 7 import javax.persistence.Id;
 8 import javax.persistence.Table;
 9 
10 @Entity
11 @Table(name = "USERS")
12 public class User {
13 
14     @Id
15     @GeneratedValue(generator = Constants.ID_GENERATOR)
16     protected Long id;
17 
18     public Long getId() {
19         return id;
20     }
21 
22     protected Address address;
23 
24     public Address getAddress() {
25         return address;
26     }
27 
28     public void setAddress(Address address) {
29         this.address = address;
30     }
31 }

You can declare @AttributeOverride s at any level, as you do for the name property of the City class, mapping it to the CITY column. This can be achieved with either (as shown) an @AttributeOverride in Address or an override in the root entity class,User . Nested properties can be referenced with dot notation: for example, on User#address , @AttributeOveride(name = "city.name") references the Address #City#name attribute.

posted @ 2016-04-07 12:22  shamgod  阅读(233)  评论(0编辑  收藏  举报
haha