...
In short, an embeddable is <fill me in!>..a seperation of data into a Java class that relies on the owning Entity for it's identity. Many(most) times an embeddable resides in the same database row as the owning Entity.
Review the getting started page on how to run the samples.
Samples
...
Schema |
---|
...
Class diagram |
---|
...
...
...
#Collections of Embeddables
#Relationships from Embeddables
#Nested Embeddables
...
In the code snippet below, there is a User Entity which has a collection of ordered Embedded addressaddresses.
Code Block | ||||
---|---|---|---|---|
| ||||
@Embeddable public class Address { @Basic private String street; @Basic private String city; @Basic private String state; @Basic private Integer zip; public Address(){ } //... } |
Code Block | ||||
---|---|---|---|---|
| ||||
@Entity public class User { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; @ElementCollection @CollectionTable(name="user_address") @OrderColumn private Set<Address> addresses = new HashSet<Address>(); public User(){ } //... } |
Code Block | ||||
---|---|---|---|---|
| ||||
... // Select Entity based off a query over a collection of embeddables Query q = em.createQuery("SELECT u FROM User u , in (u.addresses) a WHERE a.state='xx'"); // TODO -- add more! ... |
Relationships from Embeddables
...
Code Block | ||||
---|---|---|---|---|
| ||||
@Entity
public class Coordinates {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
int id;
@Basic
double longitude;
@Basic
double latitude;
public Coordinates(){
}
public Coordinates(double lon, double lat){
longitude=lon;
latitude=lat;
}
//...
}
|
Code Block | ||||
---|---|---|---|---|
| ||||
... // Embedded -> relationship traversal Query q = em.createQuery("SELECT u FROM User u , in (u.addresses) a WHERE a.coordinates.longitude=xxx"); // TODO -- add more! ... |
Nested Embeddables
In the code snippet below, there is a User Entity which has an embedded ContactInfo. ContactInfo contains two other embeddeded embeddables, Address and Phone.
...
Code Block | ||||
---|---|---|---|---|
| ||||
@Entity
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Embedded
ContactInfo contactInfo;
public User(){
}
//...
}
|
Code Block | ||||
---|---|---|---|---|
| ||||
...
// Nested embeddables traversal
Query q = em.createQuery("SELECT u FROM User u WHERE u.contactInfo.homePhone.number='507-555-5555' AND u.contactInfo.homePhone.type='cell'");
// TODO -- add more!
...
|