我在hibernate中有父子映射,其中实体通过表连接。
问题是hibernate在此表中自动创建的列被称为"_actions_id"
。但是我使用Oracle,它说列名"_actions_id"
无效。
当我用""
包装名称并手动执行脚本时,它工作正常,但有没有办法让hibernate用""
包装所有列?
答案 0 :(得分:1)
在您的示例中,您指定了一个连接表,适用于此类
的方案People table:
PID | Name
1 | Albert
2 | Bob
TelephoneNumbers table:
TID | Tel
1 | 123-456
2 | 456-789
3 | 789-012
Join table:
PID | TID
1 | 1
1 | 2
2 | 3
即。将当前实体连接到集合中的实体的列既不是当前表,也不是集合实体的表。这对于多对多映射更有用,但如果您无法控制TelephoneNumbers
表,则也可以将其用于OneToMany。否则你应该使用普通@JoinColumn
。
许多网站已多次解释@JoinTable
的使用情况。请参阅JavaDoc和this question。
答案 1 :(得分:0)
我认为您需要自定义NamingStrategy。我明白了here。在你的情况下,它会是这样的:
public class MyNamingStrategy extends DefaultNamingStrategy {
public String logicalCollectionColumnName(String columnName, String propertyName, String referencedColumn) {
return "`" + super.logicalCollectionColumnName(columnName, propertyName, referencedColumn + "`";
}
}