Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实体Bean(JPA)中的单向关系_Java_Orm_Jpa - Fatal编程技术网

Java 实体Bean(JPA)中的单向关系

Java 实体Bean(JPA)中的单向关系,java,orm,jpa,Java,Orm,Jpa,如何在EJB3.0实体bean(JPA)中建立单向关系 例如,客户知道订单,但订单对客户没有任何方法。 使用(@OneToMany或@OneToOne或@ManyToMany) 关于以下是如何使用JPA 2.0建立单向的@OneToMany关系: @Entity public class Customer { @Id @Column(name="cust_id") private long id; ... @OneToMany @JoinColumn(name="owne

如何在EJB3.0实体bean(JPA)中建立单向关系

例如,客户知道订单,但订单对客户没有任何方法。 使用(@OneToMany或@OneToOne或@ManyToMany)


关于

以下是如何使用JPA 2.0建立单向的
@OneToMany
关系:

@Entity
public class Customer {
  @Id
  @Column(name="cust_id")
  private long id;
  ...
  @OneToMany
  @JoinColumn(name="owner_id", referencedColumnName="cust_id")
  private List<Order> order;
  ...
}

@Entity
public class Order {
    @Id
    @Column(name="order_id")
    private long id;
    ...
}
订单:

+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| order_id | int(11) | NO   | PRI | NULL    |       |
| owner_id | int(11) | NO   | MUL | NULL    |       |
+----------+---------+------+-----+---------+-------+
暂时撇开“单向”不谈,我们可以如下建模客户订单关系

@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;
  // ...
}
尽管Customer类包含订单集合,但这实际上不会以任何方式影响数据库结构;这只是一种检索/管理属于客户的订单的便捷方式。例如,您可以完全从Customer中删除“orders”成员,转而依靠查询来获取这些记录


我想说的是,从数据库的角度来看,实际上不存在“单向”关系。提供的示例ReveredGreen将生成Java类,其中无法直接从Order对象获取Customer对象,但生成的数据库结构将是相同的(忽略列名中的细微差异)。您总是可以通过查询找到给定订单的客户。

请注意,JPA 1.0不支持没有连接表的单向
OneToMany
关系。换句话说,你不能用单向的
OneToMany
映射上面的表模型,因此它不能准确地说明你的答案。@JoinColumn(name=“cust\u id”,referencedColumnName=“owner\u id”)是对的吗?正如我在评论中所写的,结果数据库结构将与JPA 1.0不同,JPA1.0需要一个
JoinTable
来表示单向
OneToMany
。在阅读了您的答案后,我更新了我正在处理的项目中的一些实体,以使用您在示例中提到的标记。它的功能很好——数据库结构是相同的,子类不包含对父类的直接引用。我不需要@JoinTable注释。依赖项如下:hibernate annotations 3.4.0.GA、hibernate commons annotations 3.1.0.GA、hibernate core 3.3.2.GA、hibernate entitymanager 3.4.0.GA、持久性api 1.0。这只是Hibernate超出JPA1.0规范的一种情况吗?是的,确切地说,这是Hibernate特有的,
JoinColumn
在标准JPA1.0中的
OneToOne
上是不允许的。我提供了相关的参考资料
@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;
  // ...
}