如何在EJB3.0 Entity-Beans (JPA)中建立单向关系?
例如,客户知道订单,但订单对客户没有任何方法。使用(@OneToMany或@OneToOne或@ManyToMany)
问候
发布于 2010-08-19 04:40:14
暂时抛开“单向”不谈,可以对客户-订单关系进行建模,如下所示。
@Entity
public class Customer {
// ...
@Id @GeneratedValue
int id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "customer")
Set<Order> orders;
// ...
}
@Entity
public class Order {
// ...
@ManyToOne(optional = false)
Customer customer;
// ...
}这里我假设每个订单只有一个客户。在数据库中,Order表将有一个"customer_id“列,该列具有指向Customer表的"id”列的外键。DDL将如下所示。
CREATE TABLE Customer (
id INT NOT NULL,
...
PRIMARY KEY (id)
);
CREATE TABLE Order (
...
customer_id INT NOT NULL,
...
FOREIGN KEY (customer_id) REFERENCES Customer (id)
);尽管customer类包含一个订单集合,但这实际上不会以任何方式影响数据库结构;它只是检索/管理属于该客户的订单的一种方便方法。例如,您可以完全删除来自Customer的"orders“成员,而依靠查询来获取这些记录。
我想说的是,从数据库的角度来看,并不存在所谓的“单向”关系。提供的示例Java 将生成类,其中没有直接从Order对象获取Customer对象的方法,但是得到的数据库结构将是相同的(忽略列名的细微差别)。您总是可以通过查询的方式找到给定订单的客户。
https://stackoverflow.com/questions/3515756
复制相似问题