2011-10-05 77 views

回答

14

Embedded annotation如何影响数据库?

它根本不会影响它。在ORM提供者层上,来自嵌入实体的所有字段都是,并与父实体合并,和对待,就好像它们一直在那里声明一样。换句话说,它的工作原理就好像你将所有字段,getter和setter复制到包含嵌入对象的实体中。

SQL查询将如何更改?

他们不会。你不需要改变任何东西。往上看。

使用注释注记的典型案例是什么?

有时候你有一个巨大的表,有几列(特别是遗留数据库)。但是有些列在逻辑上彼此相关(如CUSTOMER表中的街道,城市和电话号码)。如果您不想使用所有字段创建对象,则会创建一个嵌入式对象Address。通过这种方式,您可以将地址列逻辑分组为一个对象,而不是将同样庞大的POJO与一组平坦的字段列表组合在一起。

使用嵌入对象被认为是一种很好的做法,特别是当发现强1-1关系时。

+0

好吧,坚持下去。如果用一个嵌入对象替换实体中的一组字段,“@ Embedded”不会影响数据库。但是如果你将一个类从'@ Entity'改成'@ Embedded',那将会产生相当大的影响! –

+0

* @ TomAnderson *:你是对的。实际上,如果考虑强1-1关系,这就是我考虑使用'@ Embedded'时的意思:要么使用单独的'@ Entity',要么将其与父实体合并,而保留在单独的@ Embedded类中。 –

2

延长@Tomasz Nurkiewicz嵌入对象是映射表与注释的一个复合主键丝毫帮助有用的答案@EmbenddedId

1

什么是使用注解典型的用例?

这是典型地表示一个复合主密钥作为可嵌入的类:

@Entity 
public class Project { 
    @EmbeddedId ProjectId id; 
    : 
} 



@Embeddable 
Class ProjectId { 
    int departmentId; 
    long projectId; 
} 

主键字段在一个可嵌入的类中定义。该实体包含一个使用@EmbeddedId进行注释并包含该可嵌入类的实例的单个主键字段。使用此表单时,未定义单独的ID类,因为可嵌入类本身可以表示完整的主键值。

嵌入式注释如何影响数据库?

它没有。使用此注释来表示复合主键。

SQL查询将如何更改?

他们不会。

1

就像Tomasz说的那样 - 这是一个目标 - 另一个 - 你可以在表格中“拍照”其他相关实体的状态。 F.e.

@Embeddable public class Company { 
    String name; 
    String streetName; 
    String city; 
} 



@Entity public class Invoice { 

    @Embedded 
    @AttributeOverrides({ 
     @AttributeOverride(name="name", [email protected](name="name")), 
     @AttributeOverride(name="streetName", [email protected](name="streetName")), 
     @AttributeOverride(name="city", [email protected](name="city")), 
    })    
    Company seller; 

    @Embedded 
    @AttributeOverrides({ 
     @AttributeOverride(name="name", [email protected](name="name")), 
     @AttributeOverride(name="streetName", [email protected](name="streetName")), 
     @AttributeOverride(name="city", [email protected](name="city")), 
    })   
    Company customer; 
} 

在这个例子 - 无需嵌入式和@AttributeOverrides在公司客户未来的任何变化将改变发票的数据 - 这是一个错误 - 该公司与旧数据生成发票。

这是很好的说明如下::) Java - JPA @Basic and @Embedded annotations