如何在同一实体中使用多个@Embedded?

Mor*_*ndi 6 java hibernate

我在 Java Web 应用程序中有一个可嵌入的实体,如下所示:

@Embeddable
@Getter
@Setter
public class Address {
   private String street;
   private String alley;
   private int postCode;
}
Run Code Online (Sandbox Code Playgroud)

我在另一个实体中使用了一个嵌入字段,如下所示:

@Entity
@Getter
@Setter
public class User {

    @Embedded
    private Address home;

    @Embedded
    private Address work;
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,发生错误:

org.hibernate.MappingException:实体映射中的重复列:my.package.User 列:alley(应映射为 insert="false" update="false")。

我该如何解决?

笔记:

  • 我不能用@AttributeOverrides
  • 我正在使用休眠 5.2.10。

更新: 我使用的配置applicationContext.xml如下:

<bean id="mainSessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan"> 
        <list> 
            <value>my.package</value> 
        </list> 
    </property> 

    <property name="hibernateProperties"> 
        <props> 
            <prop key="hibernate.dialect">org.hibernate.spatial.dialect.postgis.PostgisDialect</prop> 
            <prop key="hibernate.hbm2ddl.auto">update</prop> 
            <prop key="hibernate.connection.characterEncoding">UTF-8</prop> 
            <prop key="hibernate.connection.charSet">UTF-8</prop> 
            <prop key="hibernate.default_schema">public</prop> 
            <prop key="hibernate.implicit_naming_strategy">org.hibernate.boot.??model.naming.Impli??ci??tNamingStrategyCompo?nentPathImpl</prop> 
        </props> 
    </property> 
</bean> 

<bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="mainSessionFactory"/> 
</bean>
Run Code Online (Sandbox Code Playgroud)

Mor*_*ndi 1

我解决了我的问题,我想分享答案:

\n\n

关键点是定义implicitNamingStrategy

\n\n
<bean id="mfNamingStrategy"\nclass="org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl" />\n<bean id="mainSessionFactory"\n   class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> \n    <property name="implicitNamingStrategy" ref="mfNamingStrategy" />\n    <property name="hibernateProperties"> \n        <props> \n            ...\n            <!-- <prop key="hibernate.implicit_naming_strategy">org.hibernate.boot.\xe2\x80\x8c?model.naming.Impli\xe2\x80\x8c?ci\xe2\x80\x8c?tNamingStrategyCompo\xe2\x80\x8cnentPathImpl</prop> -->\n        </props> \n    </property> \n</bean> \n
Run Code Online (Sandbox Code Playgroud)\n