有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有连接实体的java Hibernate onetoone映射

一对一抓取存在问题。我有一个简单的对象层次结构

package com.example.demojpa;

public class ClaimCreateRequestFake {
    private Long claimCreateRequestId;
    private ChargebackClaimFake ChargebackClaimFake;    
    ... setters and getters are present for each entity
}

public class AbstractClaimFake {
     private Long claimInstanceId;
     private String abstractDescription;
}

public class ChargebackClaimFake extends AbstractClaimFake {
     private Long claimCreateRequestId;
     private String chargebackDescription;
}

休眠5.0.12。Final用作JPA提供程序。我使用orm。使用JPA2.0进行xml映射

<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
             version="2.0">

<sequence-generator name="claim_create_request_id_seq"
                    sequence-name="claims.claim_create_request_id_seq"
                    allocation-size="1"
                    initial-value="1"
                    schema="claims"/>

<sequence-generator name="claim_instance_id_seq"
                    sequence-name="claims.claim_instance_id_seq"
                    allocation-size="1"
                    initial-value="1"
                    schema="claims"/>

<entity class="com.example.demojpa.ClaimCreateRequestFake">
    <table name="claim_create_request_fake" schema="claims"/>
    <attributes>
        <id name="claimCreateRequestId">
            <column name="claim_create_request_id"/>
            <generated-value generator="claim_create_request_id_seq" strategy="SEQUENCE"/>
        </id>
        <one-to-one name="chargebackClaimFake" fetch="EAGER">
            <join-column name="claim_create_request_id" referenced-column-name="claim_create_request_id"/>
            <cascade>
                <cascade-all/>
            </cascade>
        </one-to-one>
    </attributes>
</entity>

<entity class="com.example.demojpa.ChargebackClaimFake">
    <table name="chargeback_claim_fake" schema="claims"/>
    <attributes>
        <basic name="claimCreateRequestId">
            <column name="claim_create_request_id"/>
        </basic>
        <basic name="chargebackDescription">
            <column name="chargeback_description"/>
        </basic>
    </attributes>
</entity>

<entity class="com.example.demojpa.AbstractClaimFake">
    <table name="abstract_claim_fake" schema="claims"/>
    <inheritance strategy="JOINED"/>
    <discriminator-column name="dtype"/>
    <attributes>
        <id name="claimInstanceId">
            <column name="claim_instance_id"/>
            <generated-value strategy="SEQUENCE" generator="claim_instance_id_seq"/>
        </id>
        <basic name="abstractDescription">
            <column name="abstract_description"/>
        </basic>
    </attributes>
</entity>
</entity-mappings>

当我试图持久化ClaimCreateRequestFake对象时,一切都很好——数据库中的每个表都有一个有效的条目。但是,当我尝试使用SpringJPA存储库方法findOne(长id)时,问题就出现了。提取的ClaimCreateRequestFake对象具有null作为ChargebackClaimFake引用。我试图跟踪负责ClaimCreateRequestFake extract的SQL查询。查询是:

select claimcreat0_.claim_create_request_id as claim_cr1_2_0_, 
chargeback1_.claim_instance_id as claim_in2_0_1_, 
chargeback1_1_.abstract_description as abstract3_0_1_, 
chargeback1_.chargeback_description as chargeba1_1_1_, 
chargeback1_.claim_create_request_id as claim_cr2_1_1_ 
from claims.claim_create_request_fake claimcreat0_ left outer join 
claims.chargeback_claim_fake chargeback1_ on 
claimcreat0_.claim_create_request_id=chargeback1_.claim_instance_id 
left outer join claims.abstract_claim_fake chargeback1_1_ on 
chargeback1_.claim_instance_id=chargeback1_1_.claim_instance_id 
where claimcreat0_.claim_create_request_id=?

claimcreat0。索赔(创建)(请求)(id=chargeback1)。claim_instance_id用于加入ChargebackClaimFake对象,但JPA声明

join column name=“claim\u create\u request\u id”引用了column name=“claim\u create\u request\u id”

我在JPA映射方面做错了什么?为什么Hibernate使用这样的连接


共 (0) 个答案