проблема при получении объекта из базы данных postgresql, который имеет свойство другого объекта в другой схеме - PullRequest
0 голосов
/ 11 мая 2019

так вот простое визуальное объяснение.

У меня есть эти два класса,

<class name="Car" table="CARS" schema="car">
    <id name="id" type="java.lang.Long">
        <generator class="increment"/>
    </id>
    <property name="name" type="text" />


</class>

и

<class name="Human" table="HUMANS" schema="human">

    <id name="id" type="java.lang.Long">
        <generator class="increment"/>
    </id>
    <property name="name" type="text" />
    <property name="car" type="path.to.Car" />


</class>

и это мой bean-файл xml для сессий БД и dataResource

<bean id="dataSource"
      class="org.apache.commons.dbcp.BasicDataSource"
      p:driverClassName="org.postgresql.Driver"
      p:url="${db.url}"
      p:username="${db.username}"
      p:password="${db.password}"
      destroy-method="close"/>

<bean id="persistenceEventInterceptor"
      class="myproject.commons.persistence.hibernate.interception.PersistenceEventInterceptor"/>

<bean id="sessionFactory"
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.spatial.dialect.postgis.PostgisDialect</prop>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.default_schema">human</prop>
            <prop key="hibernate.c3p0.min_size">50</prop>
            <prop key="hibernate.c3p0.max_size">250</prop>
            <prop key="hibernate.c3p0.timeout">1800</prop>
            <prop key="hibernate.c3p0.max_statements">150</prop>
        </props>
    </property>
    <property name="entityInterceptor">
        <ref bean="persistenceEventInterceptor"/>
    </property>
    <property name="mappingLocations">
        <list>
            <value>classpath*:myproject/core/db/libhbm/**/*.hbm.xml</value>
            <value>classpath*:myproject/core/db/hbm/**/*.hbm.xml</value>
        </list>
    </property>
</bean>


<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>


<bean id="hibernateSessionManager" class="myproject.commons.persistence.base.HibernateSessionManager">
    <constructor-arg ref="sessionFactory"/>
</bean>



<context:component-scan base-package="myproject.model">
    <context:include-filter type="regex" expression=".*\.dao\..*DAO"/>
    <context:include-filter type="regex" expression=".*\.logic\..*Mgr"/>
</context:component-scan>

проблема в том, что всякий раз, когда я пытаюсь получить, обновить или удалить строку из человеческой таблицы, я получаю эту ошибку:

Вызвано: org.postgresql.util.PSQLException: ОШИБКА: отношение "human.cars" не существует

Я знаю, что автомобили находятся в другой схеме, поэтому они не могут найти их! но как я могу сделать человеческий класс для чтения автомобильных объектов из автомобильной схемы ???

...