非列オブジェクトの春@AutowiredとHibernateの@Entity競合

ローランド・ロバーツ:

私は、アイテムの説明を含むテーブルを持っています。アイテムは非常に広範囲にすることができ価格履歴を持っています。それはリードが、私は遅延ロードと通常の1対多のHibernateマッピングを使用しないようにすることをその最後のビットです。証券取引所にダニ、などの価格履歴考えてたくさんの歴史を。

私はうまく機能キャッシュを持っているので、それはキャッシュがすでに知っている対照会する必要があるものを管理、DAOが注入され、すべてのSpringと有線のです。

だから、「自然」なものは、それの価格の歴史についての項目を尋ねることができるようにすることです。ここでは本物のスリム化バージョンであるいくつかのコードは、です:

@Entity @Table(name="item")
public class Item {
    @Id
    @Column(name="id")
    private long id;
    @Column(name="name")
    private String name;

    @Autowired
    private PriceCache priceCache;

    /* ...setters, getters for id, name ... */

    public NavigableMap<LocalDateTime,SecurityValue> getPrices(LocalDateTime begTime, LocalDateTime endTime) {
        return priceCache.get(id, begTime, endTime);
    }
}

私のオリジナルバージョンはPriceCacheを持つすべての静的メソッドを使用しました。私はそれが私はそれが簡単に例のないいくつかのビットのためのユニットテストを設定することができますインターフェイスの実装としてキャッシュを書き換えることを意味しますので、一部に注入された豆を使用してに切り替えたいです。私は私が今までデータベースに行かなくてもテストする必要がありますどのような方法で私の価格履歴を提供し、テストキャッシュオブジェクトを作成することができます。

問題は、春とHibernateがパッケージをスキャンするとき、彼らはその@Autowiredフィールドをどうするかの上に競合するように見えるということです。私はいくつかの)読みやすくするためにフォーマットすると、次の取得します。dbEMFは私のEntityManagerFactoryです。

Exception in thread "main" org.springframework.beans.factory.BeanCreationException:
   Error creating bean with name 'dbEMF' defined in class path resource [applicationContext.xml]:
     Invocation of init method failed;
   nested exception is javax.persistence.PersistenceException:
     [PersistenceUnit: default] Unable to build Hibernate SessionFactory;
   nested exception is org.hibernate.MappingException:
     Could not determine type for: com.example.cache.PriceCache, at table: item, for columns: [org.hibernate.mapping.Column(priceCache)]

ここでも、基本的なコードとキャッシュ作品罰金は、私が「手動」シングルトンとして作成PriceCache、とだけ静的メソッドを使用して。春は他の場所でも、うまく動作します作成し、注入を処理できるように変換します。それは私が私が問題に実行することをHibernateと春のこの混在しているときにのみです。

私は戻って問題を解決し、またはしないことがあります休止状態設定のため、外部のXMLファイルを使用するつもりは試していません。

これは休止状態を伝える方法がありません列は?それとも、私はこの種のもの、Itemオブジェクトのプロキシのかもしれないいくつかの並べ替えを行うには、次のことがなければならないさまざまなパターンがありますか?

NIRレヴィ:

あなたが使用することができ@Transient、それはDBに永続化すべきでない示すために、注釈を。

一般的に言って、私はこれが実体であるならば、それはそれの一部ではない任意のautowiredキャッシュを持つべきではないと思いますが、それは別の話です

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=373085&siteId=1
おすすめ