java - 具有一组自身的 Hibernate 映射实体

标签 java database hibernate dictionary many-to-many

我的代码中有这个类

@Entity(name = "Point")
@Table(name = "Point")
public class Point extends com.lsikh.unlmaps.base.Entity<Integer>{
    private Integer id;
    ...
    ...
    private Set<Point> connections = new HashSet<Point >();

我需要将 Point 实体与该 Set 中的许多其他 Point 对象相关联并检索。

这是我在数据库中的表

  CREATE
    TABLE Point(
        id INTEGER UNIQUE AUTO_INCREMENT NOT NULL,
        ...
        ...
        PRIMARY KEY (id )
    );

CREATE
    TABLE Connections(
        idA INTEGER NOT NULL,
        idB INTEGER NOT NULL,
        FOREIGN KEY (idA ) REFERENCES Point (id),
        FOREIGN KEY (idB ) REFERENCES Point(id)
    );

这是执行此操作的正确 hibernate 符号集。 我觉得可以

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "Connections", joinColumns = { 
            @JoinColumn(name = "id") }, inverseJoinColumns = { 
                    @JoinColumn(name = "idA") })
    public Set<Point> getConnections() {
        return connections;
    }

但是我在制作 map 时遇到了问题,我不确定。

最佳答案

根据 javadoc,joinColumns:

The foreign key columns of the join table which reference the primary table of the entity owning the association

因此假设 idA 是连接表中拥有实体的 ID,映射应该是:

@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "Connections", joinColumns = { 
        @JoinColumn(name = "idA") }, inverseJoinColumns = { 
                @JoinColumn(name = "idB") })
public Set<Point> getConnections() {
    return connections;
}

关于java - 具有一组自身的 Hibernate 映射实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48207610/

相关文章:

java - 在数据库中,为什么我们不能只使用 "Long"整数作为日期(自纪元以来的毫秒数)

java - 使用 .. 父目录说明符 ("dot dot"解析路径名)而不解析符号链接(symbolic link)

java - 从 hibernate 乐观锁定异常中恢复

java - Hibernate、Spring - 事务

php - 数据库查询不符合第二个条件

java - 玩2.5 Ebean和JPA : NoSuchMethodError

java - 使用 SimpleXML 和 Java 实现多个同名元素

java - 在java中无需硬编码即可设置文件位置

java - 数据库同步在线/离线

mysql - 我在 MySQL 中有两个具有相同列的表。有没有办法检测它们之间的变化?