2017-03-21 37 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 - 其他数据库需要使用存储过程来返回运行插入并返回值。