我遇到了多对一的hibernate关系问题。
我的系统是商业提案控制器,负责提供来自用户实体的提案。当提案创建并设置负责,没有问题,工作正常。但是当更改负责和更新时,它会更改对象,我可以在数据表中看到,但在数据库中没有更新。如果我在页面上刷新,则更新会消失。
@Entity
@Table(name = "proposal")
public class Proposal implements Serializable {
@Id
@GeneratedValue
private Integer id;
@ManyToOne
private User responsible;
............
DAO代码
public void update(Proposal proposal) {
this.session.update(proposal);
}
在User类中,我没有对这种关系做任何注释,它是一种单向关系。类提议还使用用户类作为参与者制作用户包,这种关系也是单向关系。
我尝试在用户类中进行注释,但也没有用。
带注释的用户类
@Entity
@Table(name="user")
public class User implements Serializable{
@OneToMany
private List<Proposal> proposal;
类User与userType具有多对一关系,并且工作正常。
@Entity
@Table(name="user")
public class User implements Serializable{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "idType, nullable = true)
private TipoUsuario userType;
有人对此有任何想法吗?
由于
答案 0 :(得分:0)
刷新到数据库后,您会看到更改。手动 - flush()或提交事务后。 User类 - 必须是实体(需要@Entity和@Id注释)或可嵌入类,并且在这种情况下应该以相应的方式配置。
如果您说 - @Entity没有@Id for User,我不确定它是如何工作的,但请再试一次:
如果在提交之前调用刷新,则所有更改都将丢失。
答案 1 :(得分:0)
我认为您错过了与您的用户的ManyToOne关系中的@JoinColumn
注释。尝试更新到:
@ManyToOne
@JoinColumn(name="userId")
private User responsible;
但显然要取代用户ID&#39;使用表名中指定的ID名称。