Oracle列名问题

时间:2012-06-04 22:41:57

标签: java oracle hibernate

我在hibernate中有父子映射,其中实体通过表连接。

问题是hibernate在此表中自动创建的列被称为"_actions_id"。但是我使用Oracle,它说列名"_actions_id"无效。

当我用""包装名称并手动执行脚本时,它工作正常,但有没有办法让hibernate用""包装所有列?

2 个答案:

答案 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的使用情况。请参阅JavaDocthis 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 + "`";
    }
}