Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate 休眠多对多联接表不填充_Hibernate_Jpa_Orm_Many To Many - Fatal编程技术网

Hibernate 休眠多对多联接表不填充

Hibernate 休眠多对多联接表不填充,hibernate,jpa,orm,many-to-many,Hibernate,Jpa,Orm,Many To Many,我想通过使用联接表的多对多关联来关联两个实体类User和Unit。然而,这并没有达到预期的效果。首先,我将简要地向您展示我到目前为止取得的成果 数据库: | User | | UserToUnit | | Unit | |Id|login|...| |User_Id|Unit_Id| |Id|name|...| 实体用户: @Entity @Table(name = "\"User\"") public class User

我想通过使用联接表的多对多关联来关联两个实体类User和Unit。然而,这并没有达到预期的效果。首先,我将简要地向您展示我到目前为止取得的成果

数据库:

|    User    |   |  UserToUnit   |   |   Unit    |
|Id|login|...|   |User_Id|Unit_Id|   |Id|name|...|
实体用户:

    @Entity
    @Table(name = "\"User\"")
    public class User implements Identifiable {
        public User() {
            units = new ArrayList<Unit>();
        }

        @Id
        @GeneratedValue(generator = "increment")
        @GenericGenerator(name = "increment", strategy = "guid")
        @Column(name = "Id", columnDefinition = "uniqueidentifier")
        private String id;

        @Transient
        @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
        @JoinTable(name = "UserToUnit",
            joinColumns = { @JoinColumn(name = "User_Id", nullable = false, updatable = false) },
            inverseJoinColumns =  { @JoinColumn(name = "Unit_Id", nullable = false, updatable = false) }
        )
        private Collection<Unit> units;
        [...]
        public Collection<Unit> getUnits() {
            return units;
        }

        public void setUnits(Collection<Unit> ous) {
            units= ous;
        }
    }
但这不会向UserToUnit表添加任何内容。我错过了什么? 干杯
Chris

我认为您应该在
用户
类和
单位
类中指定您的ID,以匹配将加入
@JoinColumn
注释的属性

您能否将此类添加到
用户
单元

@Id
@Column(name = "Id")
private long id;

您使用
@Transient
注释的原因是什么?如果您想使用属性访问,并且getter不在字段名后面,那么应该使用它


您混合了字段访问和属性访问,因此还应该将
@access(AccessType.property)
添加到getter方法中,或者将注释移动到字段中。

我省略了“[…]”以节省空间。在hibernate中不能有没有Id的实体。哦,好的。您的用户和单元实体是否正常工作,或者您与UserToUnit有相同的问题?已将Id属性添加到我的代码示例中。此外,单个实体也可以工作,是的。@Transient用于将实体序列化为JSON时的JAXB。我不明白你的第二句话。请展开。我把注释误认为javax.persistence.Transient,这意味着该字段将不会被持久化。你不是指javax.xml.bind.annotation.xml吗?我还可以看到,您已将注释移动到该字段,因此我的第二条评论现在不相关。非常感谢!你是对的。某种程度上。我把
@Transient
误认为是
@xmltranient
注释。欢呼
user.getUnits().add(unit);
unit.getUsers().add(user);
unitDAO.saveOrUpdate(unit);
userDAO.saveOrUpdate(user);
@Id
@Column(name = "Id")
private long id;