Bire Bir JPA Hazırda ilişkisi
Şema oluşturulurken bir bire bir ilişki ama hibernatetool şikayet var. İşte bu sorunu gösteren bir örnek:
@Entity
public class Person {
@Id
public int id;
@OneToOne
public OtherInfo otherInfo;
rest of attributes ...
}
İnsan bire bir Otherİnfo ile ilişkisi: var
@Entity
public class OtherInfo {
@Id
@OneToOne(mappedBy="otherInfo")
public Person person;
rest of attributes ...
}
Kişi Otherİnfo sahip olan taraf. Otherİnfo ait tarafı 7 ** kişinin kullanması için öznitelik adı "" Kişi. otherİnfo belirtmektir
Hibernatetool veritabanı şeması oluşturmak için kullanırken, aşağıdaki hata iletisini alabilirsiniz:
org.hibernate.MappingException: Could not determine type for: Person, at table: OtherInfo, for columns: [org.hibernate.mapping.Column(person)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:292)
at org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:175)
at org.hibernate.cfg.Configuration.iterateGenerators(Configuration.java:743)
at org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:854)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:128)
...
Neden herhangi bir fikir? Ben yanlış bir şey yapıyorum ya da bu Hazırda bir hata mı?
CEVAP
JPA da izin vermez@İdbir açıklamaOneToOneyaManyToOneeşleme. Yapmaya çalıştığınız şeyi bire bir varlık birliktirpaylaşılan birincil anahtar ile. En basit durumda bire bir paylaşılan anahtar ile tek yönlü:
@Entity
public class Person {
@Id
private int id;
@OneToOne
@PrimaryKeyJoinColumn
private OtherInfo otherInfo;
rest of attributes ...
}
Bu ana sorunu JPA paylaşılan birincil anahtar oluşturma desteği sağlarOtherİnfovarlık. Klasik kitap Java Persistence with Hibernate by Bauer and King sorun için aşağıdaki çözüm Hazırda uzantısını kullanan verir:
@Entity
public class OtherInfo {
@Id @GeneratedValue(generator = "customForeignGenerator")
@org.hibernate.annotations.GenericGenerator(
name = "customForeignGenerator",
strategy = "foreign",
parameters = @Parameter(name = "property", value = "person")
)
private Long id;
@OneToOne(mappedBy="otherInfo")
@PrimaryKeyJoinColumn
public Person person;
rest of attributes ...
}
Ayrıca bakınız here.
Nasıl Eclipse Hazırda Araçları yükleme...
Biri hazırda mappedBy açıklayabilecek ...
Dönüştürme gerçek nesne için bir proxy...
Hazırda Beklet: oturum arasındaki Fark...
Hazırda Beklet Vs iBATİS...