我嘗試在Play Framework 2.1中創建與JoinTable的單向OneToMany關係。但是,該框架不會生成'JoinTable':「transformation_input_files」。奇怪的部分是,如果我將關係更改爲ManyToMany,則會生成表。這裏是代碼:與JoinTable單向OneToMany關係 - 表不生成
所以它關於包含多個S3Files的Transformation類。這裏是轉換文件:
@Entity
@Table(name = "transformations")
public class Transformation extends Model {
@Id
public Long id;
/*...*/
@OneToMany(cascade = CascadeType.PERSIST)
@JoinTable(
name="transformation_input_files",
joinColumns = @JoinColumn(name="transformation_id"),
inverseJoinColumns = @JoinColumn(name="input_file_id")
)
public List<S3File> inputFiles;
}
這裏是S3File:
@Entity
@Table(name="s3files")
public class S3File extends Model {
@Id
public Long id;
/*...*/
}
的S3Files在更多的車型使用,因此不能是雙向的關係。如果我在@ManyToMany中更改@OneToMany,它會生成連接表,但是,我確實喜歡使用@OneToMany關係。
我該如何解決這個問題?我錯過了什麼嗎?
當A和B之間存在一對多關係(比如說)時,則不需要中間表。 B可以具有AId(外鍵)作爲其列,並且每行將具有由其指向的父A。可能是原因? – sanbhat 2013-05-07 14:20:22
感謝您的評論。這是真的,但是S3Files(在你的例子中是B類)被更多的類使用。所以說,還有其他類如C和D與B具有類似的OneToMany關係,現在B類包含A,C和D的列。如果B由C實例創建並擁有,則A和D爲null,甚至不相關。 – Huub 2013-05-07 14:31:14
映射連接表,該表將自動生成,並將其視爲一種良好的實踐。 – Ziul 2013-05-07 14:36:47