2016-06-16 4 views
0

からオブジェクトを取得するときに私は私がデータベースからオブジェクトPojoを得るときdLongdateを変換したい私は、いくつかのPOJOセット]フィールドHibernateはデータベース

public class Pojo { 
    @Temporal(TemporalType.DATE) 
    private Date date; 
    @Transient 
    private long dLong; 
    //other fields 
    //getters and setters 
} 

を持ってHibernateとJPA

を使用しています。私はオブジェクト

Pojo pojo = repository.findFirst(); 
Date date = pojo.getDate(); 
long l = date.getTime(); 
pojo.setDLong(l); 

を持っていますが、私は私がゲッターとセッターを使用しようとしたが失敗したrepository.findFirst() を呼び出すときにこれを実行したいとき が、私はこれを行うことができます。


編集 トップコンテンツは例です。申し訳ありませんが、私は例で私の問題を説明することはできません。今、私は私のorignalコードを示しています。

@Entity 
public class Medicament { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    private String name; 

    @Transient 
    private long date; 

    @Temporal(TemporalType.DATE) 
    private Date dateExpiration; 

    //getters and setters 
} 

次の私は、データベースから取得するときに、私はデータベースdateExpirationに格納が、サービス

@Service 
public class MedicamentService { 

    @Autowired 
    private MedicamentRepositoryEntityGraph medicamentRepositoryEntityGraph; 

    public Medicament findById(int id) { 
     return medicamentRepositoryEntityGraph.getOne("select m from Medicament m where m.id="+id, "user", "disease"); 
    } 
} 

とリポジトリ

@Repository 
public class MedicamentRepositoryEntityGraph { 

    @Autowired 
    private EntityManager entityManager; 

    public Medicament getOne(String query, String...param) { 
     EntityGraph<Medicament> entityGraph = template(param); 
     Medicament medicament = entityManager.createQuery(query, Medicament.class) 
      .setHint("javax.persistence.loadgraph", entityGraph) 
      .getSingleResult(); 
     return medicament; 
    } 

    private EntityGraph<Medicament> template(String... param) { 
     EntityGraph<Medicament> entityGraph = entityManager.createEntityGraph(Medicament.class); 
     entityGraph.addAttributeNodes(param); 
     Map<String, Object> hints = new HashMap<String, Object>(); 
     hints.put("javax.persistence.fetchgraph", entityGraph); 
     return entityGraph; 
    } 

} 

を持っている「する医薬」私'dateExpiration'をlong 'date'に変換したい場合は、メソッドMedicamentService

からメソッド findByIdを使用します。 10

私は失敗したゲッターとセッターを使用しようとしたが:

public void setDateExpiration(Date dateExpiration) { 
     this.dateExpiration = dateExpiration; 
     this.date = dateExpiration.getTime(); 
    } 
+0

なぜ、 'date.getTime()'を返すゲッターを提供しないのですか? 'repository.findFirst()'とは何ですか?カスタム実装ですか? 'Pojo'はエンティティであるか、あるいはHibernateのコンストラクタ構文を介して作成されていますか? – Thomas

+0

メインの質問にいくつかの情報を追加しました。それはstackoverflowの私の最初の投稿であり、私は質問がある私は私の質問を編集したメッセージを受け取りましたか? –

+0

いいえ、あなたの質問を編集した場合、通知はありません。 – Thomas

答えて

0

Hibernateはセッターを回避可能性がありますが、dLong「仮想」プロパティ、たとえばを作ることができますこのように:

public long getDate() { 
    if(dateExpiration == null) { 
    return -1; 
    } 

    return dateExpiration.getTime(); 
} 

//Be careful with that and add some documentation 
public void setDate(long date) { 
    dateExpiration = new Date(date); 
} 

別の方法としては、dateExpirationと同じ列にdateをマッピングでき、@Columninsertable = false, updatable = falseを追加していますが、長いにDBの日付を変換するためのカスタム・ユーザー・タイプを追加する必要があります。

+0

私はどこに私が日付プロパティを使用して表示するオブジェクトを押し出すので "仮想"限り。あなたのフレームワークに応じて、@ TomaszMolendaの –

+0

を実行できます。 Java Beansの仕様に基づいている場合 – Thomas

関連する問題