有两个实体Order和Customer,一个用户可以有多个订单,一个订单属于一个用户,所以Customer与Order是一对多的关系,那么在Order实体里可以有一个到Customer的引用customer,同时在Customer里有一个Order实体的集合orders。如果在只是如下这样写:
public class Order {
@id
private long id;
@ManyToOne
private Customer customer;
public void setId(long id) {
this.id = id;
}
public long getId() {
return this.id;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public Customer getCustomer() {
return this.customer;
}
}
public class Customer{
@id
private long id;
@OneToMany
private Set<Order> orders;
public void setId(long id) {
this.id = id;
}
public long getId() {
return this.id;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
public Set<Order> getOrders() {
return this.orders;
}
}
那么系统可能会自动生成一张Customer_Order关联表,可是事实上我们不需要这样的表,因为通过 Select order from Order order where order.customer.id=:id, 就可以找到某个Customer的Orders,而不需要另建一张表。要想去掉这个自动生成的表,要这样写:
public class Order {
@id
private long id;
@ManyToOne
@JoinColumn(name="customer", nullable=false)
private Customer customer;
public void setId(long id) {
this.id = id;
}
public long getId() {
return this.id;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public Customer getCustomer() {
return this.customer;
}
}
public class Customer{
@id
private long id;
@OneToMany(mappedBy="customer")
private Set<Order> orders;
public void setId(long id) {
this.id = id;
}
public long getId() {
return this.id;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
public Set<Order> getOrders() {
return this.orders;
}
}
多出一个mappedBy和JoinColumn, 就是告诉JPA实现者,orders是通过order里的customer映射来的,每次查找orders通过Order里的customer联接。这样就不会生成Customer_Order关联表了
分享到:
相关推荐
这是JPA标签配置手册,从ORACLE官方得到的资料,里面对JPA所有的标签都进行详细的说明。 Index of Annotations • A o @AssociationOverride o @AssociationOverrides o @AttributeOverride o @AttributeOverrides ...
* 6.select 使用触发器生成主键(主要用于早期的数据库主键生成机制,少用) * 例:@GeneratedValue(generator = "paymentableGenerator") * @GenericGenerator(name = "paymentableGenerator", strategy = "select...
奉上完整的JPA注解帮助文档
@OneToMany(mappedBy 相当于 inverse ) @ManyToOne 结合 @JoinColumn 添加一列外键 @ManyToMany 一方写 mappedBy 放弃外键维护、另一方 @JoinTable 维护中间表 收派标准修添加能实现 html 请求 后台...
和其它许多批注一样,在多对多关联中很多值是自动生成,党双向多对多关联中没有定义任何物理映射时,Hibernate根据以下规则生成相应的值,关联表名:主表表名+下划线+从表表名,关联到主表的外键名:主表名+下划线+...
一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn( name="planetype", discriminatorType=...
JPA的几个例子,一对一,一对多。 @ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY) @JoinColumn(name = "personid", unique = false, nullable = true, insertable = true, updatable = true) ...
工作流在执行的过程中肯定会涉及到很多数据,Activiti是默认提供数据库表给我们使用的 Activiti工作流框架快速入门: 定义工作流,使用插件来把我们的流程图画出来。这个流程图就是我们定义的工作流。 ...
使用了该属性,将不能再使用@JoinColumn注解。因为@JoinColumn注解表示其所注解的属性将来通过set方法设值后,会与DB中哪个字段相关联。 mappedBy属性表示当前注解的关联属性放弃了维护权,即使执行了set方法将值...
检测使用Symbok批注的类,生成相关方法并加载生成的类,而不是原始类。 将生成的类存储在Symfony缓存中,以便Symbok只需编译一次即可。 读取基本的Doctrine注释以处理属性的类型,可为空的状态和实体关系。 最初...
@JoinTable批注指示关系的所有者-相应的表包含所引用表的外键列。 @Entity public class Author { @ManyToMany @JoinTable(name = "author_book", joinColumns = {@JoinColumn(name = "books_id")}, ...
javax.persistence.JoinColumn.class javax.persistence.JoinColumns.class javax.persistence.JoinTable.class javax.persistence.Lob.class javax.persistence.LockModeType.class javax.persistence....
Java_EE_Udemy39 ... @JoinColumn(name= "airplane_fk") private Airplane airplaneDetail; 现在,这可以使排期列表自动更新。 这也意味着,如果将飞行员添加到航班中,并且航班被删除,则飞行员现在也将被删除。
本文实例讲述了Symfony2联合查询实现方法。分享给大家供大家参考,具体如下: 1.yml文件 Acme\MspadminBundle\... joinColumn: name: channel_id referencedColumnName: channel_id User: targetEntity: MspU