需要使用一对多和多对一关系。这是我对象中的双向关系,因此我可以从任一方向来回移动。mappedBy
是推荐的解决方法,但是,我听不懂。有人可以解释:
推荐的使用方式是什么?
它解决什么目的?
就我的示例而言,这是带有注释的类:
Airline
拥有许多 AirlineFlights
AirlineFlights
属于一个 Airline
航空公司:
@Entity
@Table(name="Airline")
public class Airline {
private Integer idAirline;
private String name;
private String code;
private String aliasName;
private Set<AirlineFlight> airlineFlights = new HashSet<AirlineFlight>(0);
public Airline(){}
public Airline(String name, String code, String aliasName, Set<AirlineFlight> flights) {
setName(name);
setCode(code);
setAliasName(aliasName);
setAirlineFlights(flights);
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="IDAIRLINE", nullable=false)
public Integer getIdAirline() {
return idAirline;
}
private void setIdAirline(Integer idAirline) {
this.idAirline = idAirline;
}
@Column(name="NAME", nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = DAOUtil.convertToDBString(name);
}
@Column(name="CODE", nullable=false, length=3)
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = DAOUtil.convertToDBString(code);
}
@Column(name="ALIAS", nullable=true)
public String getAliasName() {
return aliasName;
}
public void setAliasName(String aliasName) {
if(aliasName != null)
this.aliasName = DAOUtil.convertToDBString(aliasName);
}
@OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinColumn(name="IDAIRLINE")
public Set<AirlineFlight> getAirlineFlights() {
return airlineFlights;
}
public void setAirlineFlights(Set<AirlineFlight> flights) {
this.airlineFlights = flights;
}
}
航空公司航班:
@Entity
@Table(name="AirlineFlight")
public class AirlineFlight {
private Integer idAirlineFlight;
private Airline airline;
private String flightNumber;
public AirlineFlight(){}
public AirlineFlight(Airline airline, String flightNumber) {
setAirline(airline);
setFlightNumber(flightNumber);
}
@Id
@GeneratedValue(generator="identity")
@GenericGenerator(name="identity", strategy="identity")
@Column(name="IDAIRLINEFLIGHT", nullable=false)
public Integer getIdAirlineFlight() {
return idAirlineFlight;
}
private void setIdAirlineFlight(Integer idAirlineFlight) {
this.idAirlineFlight = idAirlineFlight;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="IDAIRLINE", nullable=false)
public Airline getAirline() {
return airline;
}
public void setAirline(Airline airline) {
this.airline = airline;
}
@Column(name="FLIGHTNUMBER", nullable=false)
public String getFlightNumber() {
return flightNumber;
}
public void setFlightNumber(String flightNumber) {
this.flightNumber = DAOUtil.convertToDBString(flightNumber);
}
}
编辑:
数据库模式:
AirlineFlights具有idAirline作为ForeignKey,而Airline没有idAirlineFlights。这使得AirlineFlights作为所有者/识别实体?
从理论上讲,我希望航空公司成为airlightFlights的所有者。
通过@JoinColumn
在两个模型上都指定,你就没有双向关系。你有两个单向关系,并且在那个位置有一个非常混乱的映射。你要告诉这两个模型“拥有” IDAIRLINE列。实际上,实际上其中只有一个!“正常”的事情是完全@JoinColumn
脱颖而出@OneToMany
,而是将maptedBy
添加到@OneToMany
。
@OneToMany(cascade = CascadeType.ALL, mappedBy="airline")
public Set<AirlineFlight> getAirlineFlights() {
return airlineFlights;
}
这告诉Hibernate:“在我有一个用来查找配置的集合上,检查名为’airline’的bean属性。”
问题内容: 有人可以在hibernate状态下向我解释吗?我很难理解它。 如果可以举一个例子来解释它,那就最棒了,并且它在哪种用例中最适用? 问题答案: 这是Object DB的一个很好的解释。 指定ManyToOne或OneToOne关系属性,该属性提供EmbeddedId主键,EmbeddedId主键内的属性或父实体的简单主键的映射。value元素指定关系属性所对应的组合键中的属性。如果实体的
问题内容: 为什么在Python解释器中会发生以下情况? 为什么不呢? 问题答案: 那是因为不能以二进制浮点表示形式精确表示。如果你试试 Python会做出响应,因为它只能打印出一定的精度,但是已经存在一个小的舍入错误。也会发生同样的情况,但是当您发出 然后四舍五入误差并累积。另请注意:
我试图理解JPA中注释的属性。我创建了以下示例,其中客户有一个订单列表: 现在,当我使用Hibernate生成表时,我看到Hibernate只创建了2个表: 另外,如果我试图保存一个客户和一些订单,我会看到下面由Hibernate生成的DML语句: 为什么hibernate尝试在TBL_ORDER中插入和更新记录,而不是仅仅运行一个插入查询? 现在,如果我删除mappedBy属性并尝试生成表,那么
问题内容: 抱歉,这是一个非常广泛的问题。 以下代码是网络上某些内容的片段。我感兴趣的关键是从@protected开始的行- 我想知道这是做什么的以及它是如何做到的?在执行do_upload_ajax函数之前,似乎正在检查是否已登录有效用户。这似乎是进行用户身份验证的一种非常有效的方法。我不了解此@函数的机制- 有人可以引导我正确的方向来解释如何在现实世界中实现它吗?Python 3请回答。谢谢。
问题内容: 我目前正在学习node.js,但我只是好奇这意味着什么,所以我正在学习,您能否告诉我为什么这段代码可以做到: 我知道它会将您添加到命令行的数字相加,但是为什么“ i”以2开头?我了解for循环,因此您不必对此进行详细介绍。 提前非常感谢您。 问题答案: 您可以用解决此问题。 它从2开始,因为它包含整个命令行调用: 元素和不是您所谓的“参数”,但它们确实存在。
问题内容: 我只是在android上开始,而我的java很生锈。我不记得曾经见过像这样嵌套在另一个函数中的函数。有人可以向我确切解释final的作用,并解释为什么您要在另一个函数中嵌套这样的功能吗? 问题答案: 这是一个匿名类。实际发生的情况是正在使用重写的函数创建 的子类。 关于匿名类的最优雅的事情之一是,它们使您可以在需要的地方准确定义单发类。此外,匿名类具有简洁的语法,可减少代码中的混乱情况