I (iyi ölçmek için) üstte Spring veri kalıcılık için Hibernate kullanarak bir uygulama vardır.mi?
@Entity
public class B extends A {
public String description;
}
B ekledikten sonra, şimdi bir 's yüklenemedi: Ben A sınıfının bir alt sınıfı olarak adlandırılan B eklendi beri var
@Entity
public class A {
@Id
@Column(unique = true, nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
public String name;
}
: Yakın zamana kadar, tek kalıcı A sınıfı, uygulamada yoktu .
class org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException :: Object with id: 1 was not of the specified subclass: A (Discriminator: null); nested exception is org.hibernate.WrongClassException: Object with id: 1 was not of the specified subclass: A (Discriminator: null)
Ben B'ye aşağıdaki ek açıklama ve mülk eklendi, sorunun çözülmüş gibi görünüyor: Aşağıdaki istisna oluştu. Bu sorunu çözmek için doğru yol mu?
ID NAME
-- ----
1 foo
2 bar
I: Aşağıdaki veritabanı gösterimi ile
:
...
@DiscriminatorFormula("(CASE WHEN dtype IS NULL THEN 'A' ELSE dtype END)")
public class A {
private String dtype = this.getClass().getSimpleName();
...
teşekkürler. Maalesef, uygulamanın tüm yüklemelerine doğrudan erişemeyeceğim, bu yüzden bu şema değişikliğinin kullanıcılara şeffaf olmasını istiyorum. DiscriminatorFormula'yı dtype alanını açıkça tanımlamaksızın eklemeyi denedim, ancak bu işe yaramadı. Yaptığım zaman bir hack gibi hissettim - bu yüzden sordum. – Armand
@Alison Rica ederim. IMO'nun "ideal" çözümünü size verdim. İçeriğinize uygun değilse, kullanıcılarınıza bir geçiş komut dosyası sağlayamıyorsanız (bu "ALTER" den sonra "UPDATE" i gerçekleştirir) - veya daha iyi bir otomatik geçiş aracı - daha sonra çözümünüz kabul edilebilir. En azından işe yarıyor. Ve şimdi biliyorsun hack bir tür olduğunu :) –
-) Ne yazık ki, Hibernate/Bahar göçmenler hakkında bilgi oldukça zor geldi. – Armand