@ManyToOne özelliğinde @Column (s) 'a izin verilmiyor


136

Ben özelliği ayarlanmış bir JPA varlık var

@ManyToOne
@Column(name="LicenseeFK")
private Licensee licensee;

Ancak JBoss 6 üzerinde konuşlandırdığımda uygulama bir hata veriyor:

org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property

Hibernate 3.5'i JPA 2.0 uygulaması olarak kullanıyorum.

Yabancı anahtar sütununa başvurmak için ne kullanmalıyım?


Belki @ManyToOne ek açıklamasını kaldırmak sorununuzu çözer.
ĿᴿᴹᴿæĿᴿᴹᴿ

Yanıtlar:


287

Şunun @JoinColumnyerine kullanın @Column:

@ManyToOne
@JoinColumn(name="LicenseeFK")
private Licensee licensee;

13
Ama neden? Bunun bir açıklaması var mı?
Ondrej Tokar

4
@OndrejTokar belki de @ManyToOnebu ve "mappedBy"diğer tarafta (sınıf) kullandığınız için, bu sütun (adlı "LicenseeFK") yabancı bir anahtar ve bu nedenle birleştirilmiş bir sütun olduğu anlamına gelir . Yani, adıyla bir joinColumn "LicenseeFK". Umarım şimdi açıktır.
Aleksandar

7

@JoinColumnVe @Columnbirlikte kullanmak aynı hataya neden olur. @JoinColumnDüzeltmek için yalnızca şunu kullanmak üzere değiştirin .


9
Cevabınız oldukça kafa karıştırıcı. \ @ManyToOne noktasıyla \ @Column kullanamazsınız.
Abbadon

1

@Column

JPA @Columnaçıklama temel varlık özellikleri için olduğu gibi String, Integer, Date.

Dolayısıyla, varlık özniteliği adı temel sütun adından farklıysa @Column, sütun adını açıkça belirtmek için ek açıklama kullanmanız gerekir , örneğin:

@Column(name="created_on")
private LocalDate createdOn;

@JoinColumn

@JoinColumnEk açıklama, özelleştirmek için kullanılır Yabancı anahtar sütun adı ve yalnızca bir varlık derneği ile kullanılabilir.

Dolayısıyla, sizin durumunuzda, bir @ManyToOneilişkilendirme kullandığınız için şunları kullanmanız gerekir @JoinColumn:

@ManyToOne(fetch=FetchTYpe.LAZY)
@JoinColumn(name="LicenseeFK")
private Licensee licensee;

fetchÖzniteliği FetchType.LAZYvarsayılan FetchType.EAGERolarak kullandığımız için ayarladığımıza dikkat edin ve bu korkunç bir stratejidir. Neden FetchType.LAZYdaha iyi bir varsayılan olduğu hakkında daha fazla bilgi için bu makaleye göz atın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.