Vraag Hibernate Many to one Mapping met ander aantal kolommen


Hallo ik heb 2 tabellen zoals hieronder

Tafel 1:


    + ------------------- +
    | ID LOB col1 col2 |
    + ------------------- +

Primaire sleutel (ID en LOB)

Tafel 2:


    + ----------------- +
    | SK ID col3 col4 |
    + ----------------- +

Primaire sleutel (SK)

ik moet een veel-op-één relatie geven van tabel 2 naar tabel1, sinds tafel 1 heeft compositePrimaryKey (ID en LOB) maar tafel 2 heeft geen elke kolom gerelateerd aan LOB. Ik kan de toewijzing niet leveren. Help hier alstublieft mee.

BEWERK Ik heb de slaapstandtoewijzing voor Table2 geprobeerd:

<many-to-one name="class1Obj" class="com.acs.enterprise.common.Class1" 
            lazy="proxy" insert="false" update="false">
    <column name="ID" />
    <column name="LOB" />
</many-to-one>

Het bovenstaande werkt niet. Bij het ophalen van een record probeert het LOB-code op te halen uit tabel2, wat helemaal niet bestaat in tabel 1


10
2017-07-17 13:35


oorsprong


antwoorden:


Ervan uitgaand table2.SK is een FK voor table1.ID en er zijn nee table1 invoeren met dezelfde ID, zou je de afbeelding als volgt kunnen schrijven:

@ManyToOne
@JoinColumn(name = "ID", insertable = false, updatable = false)
private Class1 class1Obj;

Als er meer zijn table1 rijen met dezelfde ID, mislukt de toewijzing omdat een kind dan aan meerdere ouders wordt gekoppeld.

Dus voor een goede many-to-one associatie heb je een FK naar een bovenliggende kolom nodig die uniek is.


2
2017-07-20 06:07



overwinteren @Id hoeft niet te corresponderen met de echte primaire sleutel van de database (hoewel het wenselijk is dat ze overeenkomen, natuurlijk).

Als ID is een unieke kolom in Table1, breng de Sluimerstand-id dan alleen in kaart en ga weg LOB als gewoon een gewoon veld.

Als ID is geen unieke kolom, dan werkt uw many-to-one toch niet correct, omdat er meerdere overeenkomende rijen in de tabel waarnaar wordt verwezen.


0
2017-07-20 09:21



@Entity
@Table(name="Table_name")
public class table_name {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "id1", column = @Column(name = "col1")),
@AttributeOverride(name = "id2", column = @Column(name = "col2")) })

-1
2017-12-14 10:15