Java Hibernate不创建我的加入条目
我在hibernate中遇到的问题是,当我在创建新社区时希望将成员插入社区时,它不会插入DB。我错在哪里 我的社区课程:Java Hibernate不创建我的加入条目,java,mysql,hibernate,Java,Mysql,Hibernate,我在hibernate中遇到的问题是,当我在创建新社区时希望将成员插入社区时,它不会插入DB。我错在哪里 我的社区课程: @Entity @Table(name = "community") public class Community extends BaseModel implements Serializable { private static final long serialVersionUID = -3290182848857364839L; @Column(na
@Entity
@Table(name = "community")
public class Community extends BaseModel implements Serializable {
private static final long serialVersionUID = -3290182848857364839L;
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
@ManyToOne
@JoinColumn(name = "owner_id", nullable = false)
private User owner;
@Column(name = "picture")
private String picture;
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
@JoinTable(name = "community_member", joinColumns = @JoinColumn(name = "community_id"), inverseJoinColumns = @JoinColumn(name = "user_id"), uniqueConstraints = @UniqueConstraint(columnNames = {
"user_id", "community_id" }))
private List<User> members = new ArrayList<User>();
//getters and setters...
我可以看到在DB中创建了一个社区,DB中已经存在一个用户,但是community.getMembers.adduser;不起作用。它应该在community_member表中创建一个新条目
是不是因为我没有为community_成员表创建java类
编辑:我添加了用户实体
@Entity
@Table(name = "user")
public class User extends BaseModel implements Serializable {
private static final long serialVersionUID = 8464105544313686923L;
@Column(name = "username", unique = true, nullable = false)
private String username;
@Column(name = "email", unique = true, nullable = false)
private String email;
@Column(name = "name", nullable = true)
private String name;
@Column(name = "surname", nullable = true)
private String surname;
@Column(name = "password", nullable = false)
private String password;
@Column(name = "rating", nullable = false)
private Long rating = 0L;
@Column(name = "picture")
private String picture;
@OneToOne(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }, mappedBy = "user")
private UserRole role;
@Enumerated(EnumType.STRING)
@Column(name = "status", nullable = false)
private UserStatus status = UserStatus.DEACTIVE;
Edit2:答案不应该是这样,但我的解决方案是:在DB中创建社区后,我向社区添加了成员。然后我更新了社区并插入了成员。可能存在以下两个问题之一: 您可能正在HttpSession之外添加临时用户,而不是当前会话中的有效持久实例。确保用户的ID/主键设置正确,和/或尝试在当前会话中检索它 向反向关系添加实体不会在数据库中存储关系,只有关系的主端会存储关系。看起来你并没有在这里定义为逆,但这是需要注意的
您不必为社区成员创建类。您说数据库中已经存在用户,您是通过Hibernate获得的吗?您是否在用户端映射了社区列表?如果是,你能显示映射吗?是的,我通过hibernate获得它。当用户登录时,我从DB获取用户对象并将其放入他的会话中。之后,我从用户的会话中获取用户对象。它会影响什么吗?显示用户实体上的映射您使用的是列表而不是集合。是否有需要索引集合的原因?我从未尝试过与索引集合建立多对多关系,我不知道需要注意的是什么,也许您需要在一侧或两侧指定@OrderColumn。您正在为社区进行设置,但正在保存transientInstance。你提供的代码准确吗?
@Entity
@Table(name = "user")
public class User extends BaseModel implements Serializable {
private static final long serialVersionUID = 8464105544313686923L;
@Column(name = "username", unique = true, nullable = false)
private String username;
@Column(name = "email", unique = true, nullable = false)
private String email;
@Column(name = "name", nullable = true)
private String name;
@Column(name = "surname", nullable = true)
private String surname;
@Column(name = "password", nullable = false)
private String password;
@Column(name = "rating", nullable = false)
private Long rating = 0L;
@Column(name = "picture")
private String picture;
@OneToOne(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }, mappedBy = "user")
private UserRole role;
@Enumerated(EnumType.STRING)
@Column(name = "status", nullable = false)
private UserStatus status = UserStatus.DEACTIVE;