2017-03-21 104 views
1

我有一個帶有多個參數的JPA/EclipseLink模型,其值由PostgreSQL數據庫設置爲默認值。具體來說,我有:在插入JPA時跳過一列

  • SERIAL類型的id列其中自動遞增,當添加新行
  • TIMESTAMP類型的created_at欄默認爲now()

我的模型看起來像這樣:

import javax.persistence.*; 

@Entity 
@Table(name="entity") 
@NamedQuery(name="Entity.findAll", query="SELECT e from Entity e") 
public class Entity { 
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Integer id; 

    @Column(name="created_at") 
    private java.sql.Timestamp createdAt; 

    // constructor, getters, and setters 
} 

當我試圖插入一行在javax.persistence.EntityManager中爲,插入失敗,因爲created_at列的值被設置爲NULL。我不想插入NULL,我只想不插入任何東西到該列中,並允許PostgreSQL將其設置爲now()。本質上,我想在createdAt上使用@GeneratedValue,但該註釋僅適用於主鍵,不能用於多個屬性。是否有另一個我可以使用的註釋來實現這一點?

+0

也許這就是你要找的東西:http://stackoverflow.com/questions/8202154/how-to-create-an-auto-generated-date-timestamp-field-in-a-play-jpa – Spasoje

回答

1

正如在另一個答案中提到的,JPA prov如果標記爲insertable = true(默認值),iders將在插入時設置該值。對於許多提供程序,即使爲空,也會發生這種情況,因爲它允許重複使用語句

只是將它從語句中排除,儘管可能不是您想要的,但要在實體(以及緩存中)中存在值,則需要刷新。 EclipseLink雖然有@ReturningInsert,它允許EclipseLink使用數據庫中的值更新實體。不幸的是,支持僅適用於Oracle - 其他數據庫需要使用存儲過程來返回運行插入並返回值。