我有三个类,其中一个名称是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工作正常.:)
我有实体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) 我有两个实体定义如下:
@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)