Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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 hibernate中的mappedBy是按照模式定义定义的还是逻辑定义的?_Java_Hibernate_Jakarta Ee_Hibernate Mapping - Fatal编程技术网

Java hibernate中的mappedBy是按照模式定义定义的还是逻辑定义的?

Java hibernate中的mappedBy是按照模式定义定义的还是逻辑定义的?,java,hibernate,jakarta-ee,hibernate-mapping,Java,Hibernate,Jakarta Ee,Hibernate Mapping,我有以下情况: 一个目标可以有多个别名 逻辑上:我希望Destination是这个关系的所有者,因为如果没有Destination,别名就没有任何意义 但是,数据库架构如下所示: DestinationAlias将idDestination作为外键,因此hibernate注释中的@JoinColumn将位于DestinationAlias上: @ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.ALL}) @JoinColumn(

我有以下情况:

一个目标可以有多个别名

逻辑上:我希望Destination是这个关系的所有者,因为如果没有Destination,别名就没有任何意义

但是,数据库架构如下所示:

DestinationAlias将idDestination作为外键,因此hibernate注释中的@JoinColumn将位于DestinationAlias上:

@ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
    @JoinColumn(name="IDDESTINATION", nullable=false)
    public Destination getMainCity() {
        return mainCity;
    }
目的地:

@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.ALL}, mappedBy = "mainCity")
    public Set<DestinationAlias> getAliases() {
        return aliases;
    }
根据此定义,DestinationAlias是此关系的所有者,因为
mappedBy
是目标类的属性


hibernate是否要求我遵循
数据库模式
并将实体标记为关系的所有者,或者是否可以基于
逻辑
原因进行此操作?

所有权会影响hibernate对基础数据库表建模的方式。如果省略mappedBy属性,hibernate将在Destination和DestinationAlias之间生成一个连接表(类似于M-M关系),而不是一个简单的连接列。除此之外,我很好奇你的实际问题是什么。这纯粹是装饰性的,还是功能性的问题在起作用

编辑:由于这似乎是一个纯粹的装饰性问题,我的建议是接受Hibernate语义。虽然我同意Hibernate称其为“所有者”似乎有悖常理,但这只是Hibernate确定的术语。它也不是唯一的,它来自于“所有者”是联接列所在的概念


不要浪费时间强迫hibernate符合您的定义,如果您不需要的话。

我当前的问题是,Destination是这个关系的所有者,从语义上讲,我希望Destination是所有者。否则代码可以正常工作。