Değiştirilemeyen eski bir şema var. Ortak özellikler için bir temel sınıf kullanıyorum ve gömülü bir nesne içeriyor. Yerleştirilmiş nesnede normalde yalnızca bir (alt) alt sınıf için kalıcılık kimliğinde olması gereken bir alan vardır. Bunu içeren yeni bir id sınıfı yaptım ama sonra alanın iki kez eşleştirildiğini anladım. İşte çok okuyucunun aklı korumak için basitleştirilmiş bazı örnek kod: Ben @AttributeOverride denediJPA'da bir üst sınıf geçişinden miras alınmış bir alan nasıl oluşturulur?
@MappedSuperclass
class BaseClass {
@Embedded
private Data data;
}
@Entity
class SubClass extends BaseClass {
@EmbeddedId
private SubClassId id;
}
@Embeddable
class Data {
private int location;
private String name;
}
@Embeddable
class SubClassId {
private int thingy;
private int location;
}
ama sadece o alanı yeniden adlandırmak için alabilirsiniz. Bunu updatable = false, insertable = false olarak ayarlamaya çalıştım ama bu, @AttributeOverride ek açıklamasında kullanıldığında işe yaramadı.
Bu sorunun çözümü için aşağıdaki cevaba bakın.
Temel sınıfı değiştirebileceğimin farkındayım ancak paylaşılan kodu, çevreleyen kod daha karmaşık hale getirecek ve bazı çirkin sarma kodları gerektireceğinden ayırmak için gömülü nesneyi bölmek istemiyorum. Bu köşe davası için tüm sistemi yeniden tasarlayabilirim ama gerçekten istemem.
JPA sağlayıcım olarak Hazırda Beklet özelliğini kullanıyorum.
Buranın 6 yaşında olduğunu biliyorum, ama bu soruya bir çözüm buldunuz mu? Ve/veya ne olduğunu hatırlıyor musun? –
@EricB. Maalesef, eşlenmiş bir alanı miras almanın bir yolunu bulamadınız. Bunu yapmanın mümkün olduğunu düşünmüyorum. Java'da kalıtsal bir yöntemin görünürlüğünü azaltmaya çalışmak gibi görebiliyorlar - bu yüzden sadece kurallara aykırı. Benim durumumda biraz çirkin olan ama tek seçenek olan köşe davasında çalıştım. –