我刚开始使用Hibernate,需要使用一对多和多对一关系.这是我的对象中的双向关系,因此我可以从任何一个方向遍历.mappedBy是推荐的方法,但是我不能理解.有没有人能解释一下:

  • 推荐的使用方式是什么?
  • 它解决了什么问题?

在我的示例中,以下是我的带注释的类:

  • Airline OWNS many AirlineFlights
  • ManyAirlineFlights属于ONEAirline

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;
    }
}

AirlineFlights:

@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);
    }
}

EDIT:

数据库架构:

AirlineFlights将idAirline作为外键,而AirlineFlights没有idAirlineFlights.这使得,航空公司作为所有者/识别实体?

理论上,我希望航空公司成为航空公司航班的所有者.

在此处输入图像描述

推荐答案

通过在两种型号上指定@JoinColumn,您就没有双向关系.你有两个单向关系,而且在这一点上它的映射非常混乱.你告诉两个模特他们"拥有"IDAIRLINE专栏.真的只有他们中的一个应该!"正常"的做法是将@OneToMany面上的@JoinColumn面完全go 掉,而将mappedBy添加到@OneToMany面上.

@OneToMany(cascade = CascadeType.ALL, mappedBy="airline")
public Set<AirlineFlight> getAirlineFlights() {
    return airlineFlights;
}

这告诉Hibernate"查看名为‘airline’的bean属性,查看我有一个集合来查找配置."

Java相关问答推荐

如何在Inspaut中获取当前路径的 * 模式 *?

Springdoc Whitelabel Error Page with Spring V3

方法没有用正确的值填充数组—而是将数组保留为null,'

为什么我的ArrayList索引的索引总是返回-1?

通过合并Akka Streams中的多个慢源保持订购

Java编译器抛出可能未正确初始化的错误?

返回响应时,CamelCase命名约定不起作用

在Java中如何从Executors.newFixedThreadPool(MAX_THREAD_COUNT())迁移到虚拟线程

如何解释Java中for-each循环中对Iterable的强制转换方法引用?

Jolt变换JSON数组问题

如何将Pane的图像快照保存为BMP?

如何在Spring Boot中创建可以将值传递给配置的&Enable&Quot;注释?

Java 21中泛型的不兼容更改

如何处理两个几乎相同的XSD文件?

RestTemplate Bean提供OkHttp3ClientHttpRequestFactory不支持Spring Boot 3中的请求正文缓冲

协同 routine 似乎并不比JVM线程占用更少的资源

在WHILE()循环初始化部分中声明和初始化变量的Java语法?

谷歌应用引擎本地服务器赢得';t在eclipse上运行

PhantomReference无法访问时会发生什么?

JOOQ:批处理CRUD操作使用动态表定义,如何?