2010-12-09 14 views
7

Hibernate ek açıklamalarını kullanarak aşağıdaki gibi bir ilişkim var, bu denedim:Hazırda bulunan ek açıklamaları kullanarak birleştirme tablolarında nasıl bir dizin oluşturabilirim?

public class Job{ 

... 

@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "jobs_resource_locations") 
@ForeignKey(name = "job_inputs_fk") 
@Index(name="job_inputs_fk") 
private List<FileSystemLocation> inputs; 

Bu tür bir şey ManyToOne üzerinde güzel bir şekilde çalışır:

@ManyToOne 
@JoinColumn(name = "service_call_id", referencedColumnName = "id") 
@ForeignKey(name = "job_service_call_fk") 
@Index(name = "job_service_call_fk") 
private ServiceCall serviceCall; 

Yabancı anahtarın emin olmak istedim PostgreSQL'e endekslenir ve şema MySQL üzerinde benzer görünür, dolayısıyla aynı isimle @ForeignKey ve @Index (MySQL her zaman FK ile aynı ada sahip bir dizin oluşturur).

Tersine dizin oluşturamıyorum çünkü FileSystemLocation ilişkinin farkında değil. Bu nedenle JoinTable.

Hazırda bekletme, Job'da indekslenecek bir sütun bulamadığı için önceki örnek başarısız oluyor:

org.hibernate.MappingException: Unable to find logical column name from physical name null in table jobs 

Hazırda bekletme modunu kullanarak herhangi bir kişi JoinTable yabancı anahtarlarında nasıl dizin oluşturacağını bilen var mı?

cevap

İlgili konular