2012-11-06 42 views
1

在我的客戶實體中,我想保存changedByUserId字段。我只想設置這個字段,如果客戶的其他領域之一真的改變了。如果我總是設置它,我強制EntityManager更新客戶表,因爲我設置了changedByUserId字段。只有在實體已經真正改變並且將被更新的情況下才設置changedby字段。

@Entity 
@Table.... 
public class Customer { 
    @Id 
    private Long cusID; 
    @Column 
    private String cusNAME; 
    @Column 
    private Date changed; 
    @Column 
    private Long changedByUserId; 

    @PreUpdate 
    private preUpdate() { 
     changed = new Date(); 
     // cannot set changedbyUserId here because no entitymanager 
     // available where i can query the id 
    } 
} 

是否有人知道如何告訴EntityManager不檢查changedByUserID字段中的更改?

回答

1

你可以做一個臨時的,短暫的領域,你永遠要設置用戶ID,無論實體被更改或不:

@Transient 
private Long tempUserId; 
@Column 
private Long changedByUserId; 

@PreUpdate 
private preUpdate() { 
    changed = new Date(); 
    changedByUserId = tempUserId; 
} 

這是實體管理器將只當一個執行​​持久性字段真的改變了。

+0

在@PreUpdate方法changedByUserId爲空,因爲該字段被標註爲瞬態。仍然無法解決如何讓它工作 – java1977

相關問題