java - org.hibernate.MappingException : Could not determine type for: java. util.Set

标签 java hibernate jpa annotations

虽然这个问题被问了很多次,我已经使用了所有的建议,但我仍然收到这个错误。

User.java 是

@Entity
@Table(name = "USER")
public class User implements UserDetails, Serializable {

    private static final long serialVersionUID = 2L;

    @Id
    @Column(name = "USER_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(name = "USERNAME")
    private String username;
    @Column(name = "PASSWORD")
    private String password;
    @Column(name = "NAME")
    private String name;
    @Column(name = "EMAIL")
    private String email;
    @Column(name = "LOCKED")
    private boolean locked;
    @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
    @ElementCollection(targetClass=Role.class)
    @Column(name = "ROLE_ID")
    private Set<Role> roles;

    @Override
    public GrantedAuthority[] getAuthorities() {
        List<GrantedAuthorityImpl> list = new ArrayList<GrantedAuthorityImpl>(0);
        for (Role role : roles) {
            list.add(new GrantedAuthorityImpl(role.getRole()));
        }
        return (GrantedAuthority[]) list.toArray(new GrantedAuthority[list.size()]);
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return !isLocked();
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    public long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public boolean isLocked() {
        return locked;
    }

    public void setLocked(boolean locked) {
        this.locked = locked;
    }

    @Override
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }

    public Set<Role> getRoles() {
        return roles;
    }
}

Role.java 是

@Entity
@Table(name="ROLE")
public class Role implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="ROLE_ID")
    private long id;
    @Column(name="USERNAME")
    private String username;
    @Column(name="ROLE")
    private String role;


    public long getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }
}

这是我第一次尝试使用 JPA 进行 hibernate 注释。所以任何建议都会非常有帮助。

对于 hibernate ,pom.xml 的依赖项是:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate</artifactId>
        <version>3.5.4-Final</version>
        <type>pom</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.5.4-Final</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.5.4-Final</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>3.1.0.GA</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.5.4-Final</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>

我不知道故障所在。

谢谢。

最佳答案

我在 @ManyToOne 列中遇到了同样的问题。它被解决了......以愚蠢的方式。我有公共(public) getter 方法的所有其他注释,因为它们被父类覆盖。但是最后一个字段被注释为私有(private)变量,就像我项目中的所有其他类一样。所以我得到了相同的 MappingException 没有原因。

解决方案:我将所有注释都放在公共(public) getter 方法中。我想,当私有(private)字段和公共(public) getter 的注释混合在一个类中时,Hibernate 无法处理这种情况。

关于java - org.hibernate.MappingException : Could not determine type for: java. util.Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6164123/

相关文章:

java - 如何在 Hibernate Search 5.10 中部分重建索引?

java - 带有实体键和实体值的 JPA 映射

java - 如何从连接池中删除损坏的连接对象?使用c3p0

java - 我对 Hibernate 感到困惑?

java - BigDecimal 的舍入值

java - Intellij IDEA 在 .tml 文件中报告 "Cannot resolve symbol"

java - float类toString方法

java - 如何结合 Webstart Maven 插件使用 Maven 将 'all-permissions' 添加到 list 文件?

java - 当使用 Hibernate table-per-class 时,如何防止为基类创建表?

java - JPA 禁止执行 ALTER SEQUENCE