我正在使用Oracle10g方言,但是hibernate为许多许多关联创建了太长的表名。
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;
Hibernate在节点上获取getISImporterProfiles()时会创建这个
选择isimporter0_。is_importter_node_id为is_importter_node_i1_0_0_,isimporter0_。isimportter_profiles_id = isimportter_profile2_1_0_,isimporter1_。Id为id1_3_1_, isimportter1_。配置为config2_3_1_,isimporter1_。Config_xslt为config_xslt3_3_1_, isimportter1_ .enabled如enabled4_3_1_, isimportter1_。锁定为locked5_3_1_,isimportter1_ .name作为name6_3_1_, isimportter1_。同步为sync7_3_1_ from is_importer_node_isimporter_profiles isimporter0_,is_importter_profile isimportter1_ whereisimporter0_.isimporter_profiles_id = isimporter1_。id和isimporter0_.is_importer_node_id = ?
这当然会导致ORA-00972异常,因为它超过30个字符。如何在不纠结于NamingStrategy的情况下解决这个问题?
如果您没有指定关系的所有者(mappedBy),那么结果将不是预期的结果(您可能会有四个表)。另外,你的实体必须是Java Bean约定(空构造函数,camelCase属性和getter/setter),否则当你通过它的getter获取属性时可能会遇到问题。
@ManyToMany(mappedBy = "importerNodes")
private List<ISImporterProfile> isImporterProfiles;
将mappedBy = "importerNodes"
添加到ISImporterNode
中的映射
@ManyToMany(mappedBy = "importerNodes")
private List<ISImporterProfile> ISImporterProfiles;