2

Hibernate Spatial バージョン 4.0-M1 を使用しています。ここのチュートリアルに従っています。ただし、私のコードは次のエラーで失敗します: org.hibernate.MappingException: Could not determine type for: org.hibernatespatial.GeometryUserType, at #table_name# for column #geometry_column#.

私のセッションファクトリ作成クラスは次のとおりです。

public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Exception ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

考えられる原因を掘り下げた後、それが私の構成に関係していることがわかりました。私のhibernate.cfg.xmlは以下のとおりです。

<session-factory>

    <property name="connection.driver_class">org.postgresql.Driver</property>
    <property name="connection.url">jdbc:postgresql://localhost:5432/dbName</property>
    <property name="connection.username">dbUsername</property>
    <property name="connection.password">dbPassword</property>

    <property name="connection.pool_size">1</property>
    <property name="dialect">org.hibernatespatial.postgis.PostgisDialect</property>
    <property name="current_session_context_class">thread</property>
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

    <property name="show_sql">true</property>

    <mapping class="com.testapp.model.EntityClassWithAnnotations" />

</session-factory>

私が間違っているかもしれないことについての考えは非常に高く評価されます。

更新:私のエンティティクラスを以下に示します:

@Entity
@Table(name = "table_name")
public class MyEntityClass implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    @Column(name = "gid")
    private Long gid;

    @Column(name = "adm1_name")
    private String  adminName;

    @Column(name = "adm1_code")
    private String adminCode;

    @Column(name = "pmal")
    private Double pmale;

    @Column(name = "pfem")
    private Double pfemale;

    @Type(type = "org.hibernatespatial.GeometryUserType")
    @Column(name = "the_geom", nullable = true)
    private Geometry geom;

    public MyEntityClass() {}

    public Long getGid() {
        return gid;
    }

    public void setGid(Long gid) {
        this.gid = gid;
    }

    public String getAdminName() {
        return adminName;
    }

    public void setAdmin_name(String adminName) {
        this.adminName = adminName;
    }

    public String getAdminCode() {
        return adminCode;
    }

    public void setAdmin_code(String adminCode) {
        this.adminCode = adminCode;
    }

    public Double getPmale() {
        return pmale;
    }

    public void setPmale(Double pmale) {
        this.pmale = pmale;
    }

    public Double getPfemale() {
        return pfemale;
    }

    public void setPfemale(Double pfemale) {
        this.pfemale = pfemale;
    }

    public Geometry getGeom() {
        return geom;
    }

    public void setGeom(Geometry geom) {
        this.geom = geom;
    }
}
4

2 に答える 2

1

編集済み:hibernate.cfgファイルにエラーが表示されていると思います。間違った方言を使用しています。

方言の行を次のように置き換えます。

<property name="hibernate.dialect" value="org.hibernate.spatial.dialect.postgis.PostgisDialect"/>
于 2012-08-23T07:36:30.140 に答える