别名对于@ manymany关联来说太长了



我正在使用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;

最新更新