@ManyToMany关联的别名太长

时间:2015-07-31 13:41:05

标签: java oracle hibernate

我正在使用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斗争的情况下解决这个问题?

2 个答案:

答案 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;