我正在使用Oracle10g方言,但hibernate为ManyToMany关联创建了太长的表名。
new org.hibernate.dialect.Oracle10gDialect().getMaxAliasLength() == 20
关系定义如下:
ISImporterProfile :
@JsonIgnore
@ManyToMany
@JoinTable(
name="IS_IMPORTER_NODE_PROFILE"
, joinColumns={
@JoinColumn(name="PROFILE_ID")
}
, inverseJoinColumns={
@JoinColumn(name="NODE_ID")
}
)
private List<ISImporterNode> importerNodes;
ISImporterNode:
@ManyToMany
private List<ISImporterProfile> ISImporterProfiles;
在节点上获取getISImporterProfiles()时,Hibernate会创建它。
选择isimporter0_.is_importer_node_id为is_importer_node_i1_0_0_, isimporter0_.isimporter_profiles_id as isimporter_profile2_1_0_, isimporter1_.id为id1_3_1_,isimporter1_.config为config2_3_1_, isimporter1_.config_xslt as config_xslt3_3_1_,isimporter1_.enabled as enabled4_3_1_,isimporter1_.locked as locked5_3_1_, isimporter1_.name为name6_3_1_,isimporter1_.sync为sync7_3_1_来自 is_importer_node_isimporter_profiles isimporter0_, is_importer_profile isimporter1_在哪里 isimporter0_.isimporter_profiles_id = isimporter1_.id和 isimporter0_.is_importer_node_id =?
这当然会创建 ORA-00972 例外,因为它超过30个字符。如何在不与NamingStrategy斗争的情况下解决这个问题?
答案 0 :(得分:0)
将ISImporterNode
添加到@ManyToMany(mappedBy = "importerNodes")
private List<ISImporterProfile> ISImporterProfiles;
this
答案 1 :(得分:0)
如果未指定关系的所有者(mappedBy),则结果将不是预期结果(并且您可能会有四个表)。另外,您的实体必须是Java Bean约定(空构造函数,camelCase属性和getter / setter),否则当您通过getter获取该属性时可能会遇到问题。
@ManyToMany(mappedBy = "importerNodes")
private List<ISImporterProfile> isImporterProfiles;