更新多对一的休眠关系没有用

时间:2014-04-14 08:58:28

标签: java hibernate jpa

我遇到了多对一的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;

有人对此有任何想法吗?

由于

2 个答案:

答案 0 :(得分:0)

刷新到数据库后,您会看到更改。手动 - flush()或提交事务后。 User类 - 必须是实体(需要@Entity和@Id注释)或可嵌入类,并且在这种情况下应该以相应的方式配置。

如果您说 - @Entity没有@Id for User,我不确定它是如何工作的,但请再试一次:

  1. 为用户运行flush。如果你没有得到任何异常 - 它是一个持久的对象。您应该在db / web应用程序日志文件中看到 - sql insert query。
  2. 提交交易。应提交User的更新值。
  3. 如果在提交之前调用刷新,则所有更改都将丢失。

答案 1 :(得分:0)

我认为您错过了与您的用户的ManyToOne关系中的@JoinColumn注释。尝试更新到:

@ManyToOne
@JoinColumn(name="userId")
private User responsible;

但显然要取代用户ID&#39;使用表名中指定的ID名称。