WebHU - Programozási kérdések és válaszok

Hibernált entitás beszúrása több az egyhez kapcsolattal

Meglehetősen új vagyok a Hibernate-ban, és kérdésem lenne, hogyan kell kezelni egy Beszúrást, ha az entitásnak van FK-ja; konkrétan hogyan kell létrehozni a beillesztendő entitást.

Entitásaim a következő egyszerűsített szerkezettel rendelkeznek:

@Entity
@Table(name="event")
public class Event implements java.io.Serializable {

    private int id;
    private int eventType
    private User user;  
    
    public Event (int id, int eventType, User user) {
        this.id = id;
        this.eventType = eventType;
        this.user = user;
    }

    @Id
    @Column(name="ID")
    public int getId() {
        return this.id;
    }

    @Column(name="EVENT_TYPE", nullable=false)
    public int getEventType() {
        return this.eventType;
    }
    
    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, targetEntity=User.class )
    @JoinColumn(name="USER_ID")
    public User getUser() {
        return this.user;
    }
    ...
}

-----------

@Entity
@Table(name="user")
public class User implements java.io.Serializable {

    private int id;
    private String name;
        
    public User (int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Id
    @Column(name="ID")
    public int getId() {
        return this.id;
    }

    @Column(name="Name", nullable=false)
    public String getName() {
        return this.name;
    }
    ...
}

Most meg akarok tartani egy új eseményt, és az esemény Felhasználójához társítottam a UserID-t.

Valami ilyesmit kell létrehoznom:

Event eventToInsert = new Event(45,6,  *User object I don't have*);

hogy később szóljon a hibernáltnak, hogy mentse az eseményt az Insertbe.

A problémám az, hogy csak a felhasználói azonosítóm van, de az esemény létrehozásához szükségem van a teljes felhasználói objektumra, és nem csak az azonosítójára.

Szóval a kérdések:

- Ez tervezési hiba? Az eseménynek csak egy „int userID” mezője legyen a „Felhasználói felhasználó” helyett?

- A Hibernate-nek van valami módja ennek a problémának a kezelésére? Valami hasonló:

Event eventToInsert = new Event(45,6, Hibernate.getEntity(UserTable, UserIdValue);

-Mi lenne a megfelelő módja ennek?

Köszönöm a segítséget.


Válaszok:


1
Event eventToInsert = new Event(45, 6, (User) session.load(User.class, userIdValue));

De ha nem ismeri a Session.load és a Session.get programokat, javaslom, hogy olvassa el a Hibernált dokumentáció. Ez a legalapvetőbb dolog: egy entitás betöltése az elsődleges kulcsával.

Azt is vegye figyelembe, hogy a kaszkád a ManyToOne-on bizarr: ez azt jelenti, hogy potenciálisan létrehozza/módosítja a felhasználót minden alkalommal, amikor módosítja az eseményeit.

23.03.2011

2

Képesnek kell lennie arra, hogy egy a sokhoz adjon egyet a felhasználónak, például:

@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private final Set<Event> events = new HashSet<Event>();

akkor csak meg kell szereznie a felhasználót az Ön azonosítójával, hozzá kell adnia az eseményt a gyűjteményhez, és továbbra is fenn kell tartania. Szerintem ennek működnie kell.

23.03.2011
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..