Hibernate Spatial 和 PostGIS 主键问题
Hibernate Spatial and PostGIS Primary Key Issue
我是 PostGIS 的新手,我正在将 PostGIS 与 Hibernate Spatial 和 Spring 框架结合使用。问题是主键没有自动设置,在向数据库中插入数据时出现以下错误:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.ConstraintViolationException: ERROR: null value in column "id" violates not-null constraint
Detail: Failing row contains (null,name , country).
我已经在 MySQL 上测试了代码,它工作正常。但是,当使用 Hibernate Spatial 和 PostGIS 时,它给了我提到的错误。这是模型:
@Entity
@Table(name="person")
public class Person {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private String country;
...
}
插入数据的代码如下:
public void addPerson(Person p) {
Session session = this.sessionFactory.getCurrentSession();
session.persist(p);
}
这里是 Maven 中的依赖项:
postgis-jdbc: 1.5.2
postgresql: 8.4-702.jdbc3
hibernate-entitymanager: 4.0.0.Final
hibernate-core: 4.0.0.Final
hibernate-spatial: 4.0
commons-dbcp: 1.4
spring version: 4.0.3.RELEASE
和 Hibernate 配置:
<beans:bean id="hibernate4AnnotatedSessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="annotatedClasses">
<beans:list>
<beans:value>it.polimi.thesis.model.Person</beans:value>
</beans:list>
</beans:property>
<beans:property name="hibernateProperties">
<beans:props>
<beans:prop key="hibernate.dialect">org.hibernate.spatial.dialect.postgis.PostgisDialect
</beans:prop>
<beans:prop key="hibernate.show_sql">true</beans:prop>
<beans:prop key="hibernate.ddl-auto">update</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
如有任何帮助,我将不胜感激。如果需要任何其他信息,请告诉我。
好的,经过一番搜索,此解决方案有效:
@Id
@Column(name="id", unique=true, nullable=false)
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
private int id;
我还添加了以下休眠配置:
<beans:prop key="hibernate.format_sql">true</beans:prop>
我是 PostGIS 的新手,我正在将 PostGIS 与 Hibernate Spatial 和 Spring 框架结合使用。问题是主键没有自动设置,在向数据库中插入数据时出现以下错误:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.ConstraintViolationException: ERROR: null value in column "id" violates not-null constraint
Detail: Failing row contains (null,name , country).
我已经在 MySQL 上测试了代码,它工作正常。但是,当使用 Hibernate Spatial 和 PostGIS 时,它给了我提到的错误。这是模型:
@Entity
@Table(name="person")
public class Person {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private String country;
...
}
插入数据的代码如下:
public void addPerson(Person p) {
Session session = this.sessionFactory.getCurrentSession();
session.persist(p);
}
这里是 Maven 中的依赖项:
postgis-jdbc: 1.5.2
postgresql: 8.4-702.jdbc3
hibernate-entitymanager: 4.0.0.Final
hibernate-core: 4.0.0.Final
hibernate-spatial: 4.0
commons-dbcp: 1.4
spring version: 4.0.3.RELEASE
和 Hibernate 配置:
<beans:bean id="hibernate4AnnotatedSessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="annotatedClasses">
<beans:list>
<beans:value>it.polimi.thesis.model.Person</beans:value>
</beans:list>
</beans:property>
<beans:property name="hibernateProperties">
<beans:props>
<beans:prop key="hibernate.dialect">org.hibernate.spatial.dialect.postgis.PostgisDialect
</beans:prop>
<beans:prop key="hibernate.show_sql">true</beans:prop>
<beans:prop key="hibernate.ddl-auto">update</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
如有任何帮助,我将不胜感激。如果需要任何其他信息,请告诉我。
好的,经过一番搜索,此解决方案有效:
@Id
@Column(name="id", unique=true, nullable=false)
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
private int id;
我还添加了以下休眠配置:
<beans:prop key="hibernate.format_sql">true</beans:prop>