【问题标题】:hibernate h2 not generating relations休眠h2不产生关系
【发布时间】:2016-01-08 07:00:06
【问题描述】:

我正在尝试生成到我的 H2 数据库的 Hibernate 映射。 我有 2 个测试表,分别称为 users 和 users_groups。 它们看起来像:

users table:
    user_id           integer     PK
    login             varchar
    password          varchar
    user_group_id     integer     FK

users_groups
    user_group_id     integer     PK
    name              varchar

问题是hibernate会生成这样的实体:

@Entity
public class Users {
private int userId;
private int userGroupId;

@Id
@Column(name = "USER_ID", nullable = false)
public int getUserId() {
    return userId;
}

public void setUserId(int userId) {
    this.userId = userId;
}


@Basic
@Column(name = "USER_GROUP_ID", nullable = false)
public int getUserGroupId() {
    return userGroupId;
}

public void setUserGroupId(int userGroupId) {
    this.userGroupId = userGroupId;
}

@Entity
@Table(name = "USERS_GROUPS", schema = "PUBLIC", catalog = "DATABASE")
public class UsersGroups {
private int userGroupId;

@Id
@Column(name = "USER_GROUP_ID", nullable = false)
public int getUserGroupId() {
    return userGroupId;
}

public void setUserGroupId(int userGroupId) {
    this.userGroupId = userGroupId;
}

所以没有生成关系注释,例如@OneToMany 或@ManyToMany 等。我做错了什么?谢谢你的帮助。 p.s.我希望它生成像 具有 UserGroup 类型字段的用户类

【问题讨论】:

    标签: java hibernate orm mapping h2


    【解决方案1】:

    如果类是像这样自动生成的,请检查您在数据库中两个表之间的关系,并确保您选择了正确的架构,您的映射完全错误,例如:-

    1-您的映射的自动生成的类缺少某些列,class User 不包含 passwordlogin 列,class UsersGroups 不包含 名称 列。

    2- class User 没有@table 注释

    它们应该看起来像这样:-

    类用户组

    @Entity
    @Table(name = "USERS_GROUPS", schema = "PUBLIC", catalog = "DATABASE")
    public class UsersGroups implements java.io.Serializable {
       private int userGroupId;
       private String name;
       private Set<Users> users = new HashSet<Users>(0);
    
       public UsersGroups() {
        }
    
       @Id
       @GeneratedValue(strategy = IDENTITY) //this to make the id auto increment
       @Column(name = "user_group_id", nullable = false)
       public int getUserGroupId() {
           return userGroupId;
       }
    
       public void setUserGroupId(int userGroupId) {
           this.userGroupId = userGroupId;
       }
    
       // if name column is not unique / nullable remove values from annotation 
       @Column(name = "name", unique = true, nullable = false, length = 10)
        public String getName() {
           return this.name;
        }
        public void setName(String name) {
        this.name= name;
        }
       @OneToMany(fetch = FetchType.EAGER, mappedBy = "users_groups")
       public Set<Users> getUsers() {
           return this.users;
       }
    
       public void setUsers(Set<Users> users) {
           this.users= users;
       }
       }
    

    类用户

    @Entity
    @Table(name = "users", schema ="PUBLIC" , catalog ="DATABASE")
    public class Users implements java.io.Serializable {
    
        private Integer userId;
        private UsersGroups usersGroups;
        private String password;
        private String login;
    
        public Users() {
        }
    
    
        @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "user_id", unique = true, nullable = false)
        public Integer getUserId() {
            return this.userId;
        }
    
        public void setUserId(Integer userId) {
            this.userId = userId;
        }
    
            @ManyToOne(fetch = FetchType.EAGER)
            @JoinColumn(name = "user_group_id", nullable = false)
            public UsersGroups getUsersGroups() {
                return this.usersGroups;
            }
    
            public void setUsersGroups(UsersGroups usersGroups) {
                this.usersGroups = usersGroups;
            }
    
            @Column(name = "password",length = 10)
            public String getPassword() {
                return this.password;
            }
    
            public void setPassword(String password) {
                this.password = password;
            }
    
            @Column(name = "login",length = 10)
            public String getLogin() {
                return this.login;
            }
    
            public void setLogin(String login) {
                this.login = login;
            }
    
        }
    

    查看完整的example 以获取一对多映射

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多