表属性がclock_timestampのデフォルト値を()を持っていればどのようにエンティティ内の属性をanotateするには?

Vape:

Postgresデータベースでは、私はclock_timestamp()関数のデフォルト値は「insert_timeとして」属性(TIMESTAMPTZ)、とテーブルを持っています。

Javaでは)、私はテーブルからエンティティを作成しましたが、私は、テーブルに新しいレコードを挿入したいときinsert_timeとしては、(代わりにclock_timestampのヌルの値を持ちます。

clock_timestampの「デフォルト値」(というinsert_timeとしてはJavaで渡されていない場合、正しくそうエンティティに注釈を付ける方法)テーブル自体に使用されていますか?

属性がnullに設定されている場合、またはエンティティでclock_timestampを()読み取る方法。

感謝

Vladucu Voican:

あなたは、単にJPAエンティティを注釈を付けないことができ、その値は関数によって返されます clock_timestamp()

あなたのコードにその値を取得するためには、クエリを実行する必要があります。

SELECT clock_timestamp();

しかし、あなたは似た何かを達成するためにJPA-リスナーを使用することができます。

public class TimestampEntityListener {
    @PrePersist
    public void setDefaultTime(BaseEntity entity) {
       if(entity.getInsertTime() == null) {
           entity.setInsertTime(new Timestamp((new Date()).getTime())):
       }
    }
}

@MappedSuperclass
@EntityListeners({TimestampEntityListener.class})
public abstract class BaseEntity {...}

あなたが本当にDBはそれを行うには、アプリケーションを委任挿入する時間を制御し、持たないに興味があるなら今、あなたは上記のコードを変更することができますし、それはDBに対して選択実行することができるので、それにEntityManagerを配線しますそしてちょうど直接その値を設定します。

アップデート:データベースを照会するentityListenerを委任する方法について

public class TimestampEntityListener {
        @Autowired
        EntityManager entityManager;

        @PrePersist
        public void setDefaultTime(BaseEntity entity) {
           AutowireHelper.autowire(this, this.entityManager);
           if(entity.getInsertTime() == null) {
               Timestamp timestamp = (Timestamp)entityManager.createNativeQuery("select clock_timestamp()").getSingleResult();
               entity.setInsertTime(timestamp):
           }
        }
    }

あなたは、このクラスを使用することができますAutowireHelperと上記のコードでそれは長い間、あなたのエンティティが拡張するようとして箱から出して動作するはずBaseEntityを

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=364342&siteId=1