2015-01-23 19 views
5

Bir uygulamayı Hazırda Bekletme Kaynağından JPA'ya geçiriyorum. Zaten birkaç depodan geçtim ve bu işe sahip oldum. Şimdi dönüştürmem gereken özel bir durum var.Aynı sınıfa 2 varlık adıyla Spring Data JPA'ya nasıl geçiş yapılır?

benim .hbm.xml içinde bu var: Sadece 1 sınıf SoundNotification var, ama 2 farklı entity-name s (SoundNotificationWithData ve SoundNotificationWithoutData) ile nasıl kullanıldığını

<class name="SoundNotification" table="SoundNotification" entity-name="SoundNotificationWithData"> 
     <id name="m_id" type="int" column="id" unsaved-value="-1"> 
      <generator class="native"/> 
     </id> 
     <property name="m_name" column="name" unique="true" not-null="true"/> 
     <property name="m_data" column="data" 
        type="com.traficon.tmsng.server.common.service.persistence.impl.hibernate.usertype.BlobUserType" 
        not-null="true"/> 
     <property name="m_size" formula="OCTET_LENGTH(data)"/> 
     <property name="m_inUse" 
        formula="(select count(1) from EventTypeConfiguration etc where etc.soundNotification=id)"/> 
    </class> 

    <class name="SoundNotification" table="SoundNotification" entity-name="SoundNotificationWithoutData"> 
     <id name="m_id" type="int" column="id" unsaved-value="-1"> 
      <generator class="native"/> 
     </id> 
     <property name="m_name" column="name" unique="true" not-null="true"/> 
     <property name="m_size" formula="OCTET_LENGTH(data)"/> 
     <property name="m_inUse" 
        formula="(select count(1) from EventTypeConfiguration etc where etc.soundNotification=id)"/> 
    </class> 

Bildirimi

bunu mı bunu Spring Data JPA'ya dönüştürmek mümkün mü? Bir "geçici çözüm" olarak 2 java sınıfı oluşturmam gerekecek mi? Elimizdeki

Başka bir örnek bu biridir: Burada

<class name="FlowDataMessageImpl" entity-name="FlowDataPer10s" table="FlowDataPer10s"> 
... 
</class> 

<class name="FlowDataMessageImpl" entity-name="FlowDataPer20s" table="FlowDataPer20s"> 
.... 
</class> 
<class name="FlowDataMessageImpl" entity-name="FlowDataPer2m" table="FlowDataPer2m"> 
... 
</class> 

bazı roll-up hesaplamalar yaptı sonra biz farklı tablolarda aynı "Java nesnesi" saklayın. Bu JPA kullanarak (ya da birileri bunun kötü bir fikir olduğunu söylemeye ve bunun için daha önce doğrudan gibi Hibernate kullanmalıdır) ilk soru için

+0

Daha önce benzer bir şey görmedim bu yüzden sormak istiyorum: böyle bir haritalamanın kullanımı nedir? Eğer 'SoundNotificationWithoutData' gibi bir sorgu yaparsanız, 'm_data == null' olan tüm kayıtları aldınız ya da yine de sorgudaki kısıtlamayı eklemeniz gerekiyor mu? Teşekkürler. –

+0

Bir sınıf bir kez yüklenir ve bir EMF bu sınıf için tek bir eşleştirmeye sahip olabilir. Açıkçası, bir EMF ve diğeri de diğer EMF için bir eşleme ile 2 EMF'ye sahip olabilirsiniz. Bunu yapabileceğiniz tek durum budur. Buradaki JPA burada bahsediyoruz, "Spring Data JPA" değil " –

+0

@CristianSevescu" Veritabanından BLOB (bir mp3 dosyasıdır) ile veya BLOB olmadan veritabanından isteyebilirsiniz. –

cevap

2

harita istiyorum: Eğer iki Java sınıfları SoundNotificationWithoutData ve SoundNotificationWithData oluşturmanız gerekecektir ve her iki sınıf da aynı üçüncü Java sınıfını genişleterek, @Inheritance(strategy=InheritanceType.SINGLE_TABLE)'u kullanarak ve @Table(name="SoundNotification") ek açıklamasını kullanarak eşleştirilir. Ayrıca bir formül (özellik m_inUse) özelliği oluşturmak için düz JPA içinde yapamayacağınızı da unutmayın, bu nedenle Hazırda bekletme özel şeyler kullanmanız gerekir VEYA bu özelliği yalnızca gerektiğinde yükleyin. İkinci sorun için

: yine, hazırda özgü şeyler kullanmak ya VEYA Üzerinde @Entity ve @Inheritance ek açıklamaları kullanmadan, (her FlowDataPer* sınıfları tarafından uzatılır) üst sınıf üzerinde @MappedSuperclass notu kullanın. Tabii ki, ilk sorunuzla aynı çözümü de kullanabilirsiniz: (FlowDataPer10s, FlowDataPer20s, ..) @Entity ve @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) ile ilişkilendirilen bir temel varlık sınıfını genişletiyor ancak @MappedSuperclass ek açıklamalarıyla daha şık buluyorum.

+0

2. problem için, verilerin taşınması bir sorun değildir, haritalamadır. Ayrıca her bir masa için farklı Java sınıfları oluşturulmasını tavsiye eder misiniz (hepsi aynı java sınıfını genişletiyor)? –

+0

Oh, eğer varlıklar hiçbir zaman FlowDataPer10s'den 'FlowDataPer20s'ye değişmezse, o zaman elbette aynı Java sınıfını genişleten birden fazla Java sınıfını kullanarak (ama' @Inheritance (strateji = InheritanceType.TABLE_PER_CLASS' ile) –

+0

Alternatif olarak, problem: [@MappedSuperclass] 'i (http://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html) ek notu bir "@ Entity" olarak tanımlamaksızın kullanabilirsiniz. '@ Inheritance'. –