我正在开发一个项目,我通过添加Hibernate注释来持久保存一些POJO.有一个问题我运行到是像这样的代码失败,因为Hibernate的尝试中的子字段映射Time_T到同一列(即startTime.sec和stopTime.sec都试图映射到科拉姆sec,导致错误).
@Entity
public class ExampleClass
{
@Id
long eventId;
Time_T startTime;
Time_T stopTime;
}
@Embeddable
public class Time_T
{
int sec;
int nsec;
}
Run Code Online (Sandbox Code Playgroud)
由于会有很多出现这样在整个系统中,这将是很好,如果有自动追加的前缀列的名称(例如使列是一个选项startTime_sec,startTime_nsec,stopTime_sec,stopTime_nsec),而不必基于每个应用覆盖现场基础.Hibernate是否具备此功能,还是有其他合理的解决方法?
使用JPA annoations,我想重用相同的嵌入对象,如下所示:
@Entity
public class User {
@Embedded
public Address homeAddress;
@Embedded
public Address workAddress;
}
@Embeddable
public class Address {
public String code;
public String city;
...
}
Run Code Online (Sandbox Code Playgroud)
我可以使用@AttributeOverrides,@ AttributeOverride和@Column指定SQL列名,但它是verbos.是否可以仅为homeAddress和workAddress指定要添加到每列的前缀?
谢谢,
泽维尔
我在 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。更新:
我使用的配置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> …Run Code Online (Sandbox Code Playgroud)