相关疑难解决方法(0)

JPA OneToMany和ManyToOne抛出:实体列映射中的重复列(应使用insert ="false"update ="false"进行映射)

我有三个类,其中一个名称是User,这个用户有其他类实例.像这样;

public class User{
    @OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
    public List<APost> aPosts;

    @OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
    public List<BPost> bPosts;
}




   public class BPost extends Post {

    @ManyToOne(fetch=FetchType.LAZY)    
    public User user;
 }

    public class APost extends Post {

     @ManyToOne(fetch=FetchType.LAZY) 
     public User user;
 }
Run Code Online (Sandbox Code Playgroud)

它的工作方式与此类似,但在db中生成emty表.哪个必须包含外键.当我尝试使用mappedBy和JoinColumn annotains时,我失败了.我该如何解决这个问题?

额外的信息:

当我换了;

 @ManyToOne(fetch=FetchType.LAZY)
 @JoinColumn(name="id")
 public User user;
Run Code Online (Sandbox Code Playgroud)

 @OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="id")
 public List<APost> aPosts;
Run Code Online (Sandbox Code Playgroud)

我越来越

发生JPA错误(无法构建EntityManagerFactory):实体映射中的重复列:models.post.APost列:id(应使用insert ="false"update ="false"映射)

最终编辑:最后,我对jpa注释完全错了.:(当我改变

@OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="id")
Run Code Online (Sandbox Code Playgroud)

@OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="user")
Run Code Online (Sandbox Code Playgroud)

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="user_id")
Run Code Online (Sandbox Code Playgroud)

everthing工作正常.:)

java hibernate jpa one-to-many many-to-one

49
推荐指数
2
解决办法
13万
查看次数

JPA/Hibernate双向多对一导致StackOverflowException

我有实体User和GrantedRole具有双向一对多关系.

当我尝试将GrantedRole添加到Set in User时,没有抛出异常,但是当我调试User和GrantedRole对象的变量时,会有一个读取的描述

com.sun.jdi.InvocationException发生了调用方法.

调试时可以读取变量的不同字段,但是当我选择User中的角色字段或GrantedRole中的用户字段时,我得到与上面相同的描述.当我进入用户的Set of GrantedRole时,我最终找到以下描述:

详细格式化程序错误:发生异常:java.lang.StackOverflowError

我的代码:

public class User {
    private Set<GrantedRole> roles = new HashSet<GrantedRole>();

    public User() {
        super();
    }
    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "user")
    public Set<GrantedRole> getRoles() {
        return roles;
    }

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

    // equals and hashCode are based on username
    // toString is based on all fields
}

public class GrantedRole { …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa bidirectional one-to-many

8
推荐指数
1
解决办法
8648
查看次数

Hibernate 在查询时抛出 StackOverflowError

我有两个实体定义如下:

@Entity
@Table(name = "shapes")
public class Shape {
    @Id
    private int id;

    @Column(nullable = false)
    private String name;

    @OneToMany(mappedBy="shape", fetch = FetchType.EAGER)
    private List<ShapeElement> shapeElements;

    public int getId() {
        return id;
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

@Entity
@IdClass(ShapeElementPK.class)
@Table(name = "shape_elements")
public class ShapeElement {
    @Id
    @ManyToOne
    @JoinColumn(name = "shape_id")
    private Shape shape;

    @Id
    @Column(name = "x_delta")
    private int xDelta;

    @Id
    @Column(name = "y_delta")
    private int yDelta;
}
Run Code Online (Sandbox Code Playgroud)

使用以下 IdClass:

@Embeddable
public class ShapeElementPK implements Serializable {
    private static final long …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow hibernate

3
推荐指数
1
解决办法
4013
查看次数