Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 使用联接列的非标识符属性休眠多对多关系_Java_Hibernate_Annotations - Fatal编程技术网

Java 使用联接列的非标识符属性休眠多对多关系

Java 使用联接列的非标识符属性休眠多对多关系,java,hibernate,annotations,Java,Hibernate,Annotations,如果其中一个联接列不是该实体的标识符属性,是否可以使用注释在Hibernate中创建多对多关系?父实体有两个不同的唯一属性,我希望能够使用其中任何一个作为联接列,但我担心Hibernate可能不允许这样做 在MySQL中,这类似于创建一个外键约束,该约束引用父表上的唯一列,但不引用主键 在我的MySQL数据库中,我有一个连接表,它与一个父表具有两种不同的外键关系。这样做是为了支持具有相同数据库表的两组代码,我正在尝试更新旧对象以使用新映射,这样我就可以放弃对联接表中一个外键的支持 我通读了文档,

如果其中一个联接列不是该实体的标识符属性,是否可以使用注释在Hibernate中创建多对多关系?父实体有两个不同的唯一属性,我希望能够使用其中任何一个作为联接列,但我担心Hibernate可能不允许这样做

在MySQL中,这类似于创建一个外键约束,该约束引用父表上的唯一列,但不引用主键

在我的MySQL数据库中,我有一个连接表,它与一个父表具有两种不同的外键关系。这样做是为了支持具有相同数据库表的两组代码,我正在尝试更新旧对象以使用新映射,这样我就可以放弃对联接表中一个外键的支持

我通读了文档,找不到任何关于是否支持此功能的明确信息。如有任何见解,将不胜感激

谢谢

以下是Java类(针对这个问题进行了简化,因此请原谅任何拼写错误):


可以这样做,但需要将关系设置为只读,因为hibernate不太聪明,不知道如何填充表项_标记


我认为您当前的映射不起作用,因为您有一个cascade all-in
。如果您需要更多信息,请告诉我,我可以尝试制作一个示例映射

谢谢。我也许可以把瀑布全部除掉。如何将关系设置为只读?
@Entity
@Table(name="TAG")
@org.hibernate.annotations.Table(appliesTo = "TAG")
public class Tag implements Externalizable {
    private Long id;
    private String name;

    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "TAG_ID", unique = true)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Id
    @Column(name = "NAME", unique = true)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        name = name.toLowerCase();
        this.name = name;
    }

}


@Entity
@Table(name="ITEM")
@org.hibernate.annotations.Table(appliesTo = "ITEM")
public class Item implements Externalizable {
    private Long id;
    private String name;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ITEM_ID")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Column(name = "NAME")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        name = name.toLowerCase();
        this.name = name;
    }

    //tag support
    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
    @Fetch(value = FetchMode.SELECT)
    @JoinTable(name = "ITEM_TAG", joinColumns = {@JoinColumn(name = "ITEM_ID")}, inverseJoinColumns = @JoinColumn(name = "TAG_NAME", referencedColumnName="NAME"))
    @OrderBy("name")
    public Set<Tag> getTags() {
        return tags;
    }

    public void setTags(Set<Tag> tags) {
        this.tags = tags;
    }
}
mysql> desc tag;
+--------+------------------+------+-----+---------+----------------+
| Field  | Type             | Null | Key | Default | Extra          |
+--------+------------------+------+-----+---------+----------------+
| tag_id | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name   | varchar(255)     | NO   | UNI | NULL    |                |
+--------+------------------+------+-----+---------+----------------+

mysql> desc item;
+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| item_id | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name    | varchar(255)     | NO   |     | NULL    |                |
+---------+------------------+------+-----+---------+----------------+

mysql> desc item_tag;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| item_tag_id | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| item_id     | int(10) unsigned | NO   | MUL | NULL    |                |
| tag_id      | int(10) unsigned | NO   | MUL | NULL    |                |
| tag_name    | varchar(255)     | NO   | MUL | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+