Duplikowanie się danych w relacji many-to-one w Hibernate

Duplikowanie się danych w relacji many-to-one w Hibernate
IN
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:47
0

Witam, natknąłem się na problem z duplikatami danych w trakcie dodawania encji połączonych relacją many-to-one w hibernate. Mam tabelę "Trip" oraz "Place", gdzie jedno miejsce może być przypisane do wielu wycieczek. W momencie dodawania pierwszy raz wycieczki wraz z miejscem wszystko ładnie działa, lecz w momencie dodania wycieczki z tym samym miejscem (wszystkie pola takie same), oprócz nowego rekordu wycieczki mam także nowy rekord miejsca dokładnie z tymi samymi danymi co poprzedni... W jaki sposób mogę uniknąć takiego zachowania, tak aby jeden rekord miejsca mógł faktycznie być przypisany do wielu wycieczek?

Klasa "Trip":

Kopiuj
 public class Trip implements java.io.Serializable {
 
    private int idTrip;
    private int idHotel;
    private Date date;
    private int cost;
    private int profit;
    private String organisator;
    private int period;
    private String food;
    private String transport;
    private int persons;
    private int kidsAmount;
    
    private String ownerName;
    private String ownerLastName;
    
    private Place place;
  • konstruktory, get() i set(),

Klasa "Place":

Kopiuj
 public class Place implements java.io.Serializable {


    private int idPlace;
    private String country;
    private String city;
    private String island;
    private String information;
  • konstruktory, get() i set(),

Mapowanie "Trip":

Kopiuj
 <hibernate-mapping>
    <class name="pl.th.java.biuro.hibernate.Trip" table="Trip">
        <id column="idTrip" name="idTrip" type="int"/>
        <property column="date" name="date" type="date"/>
        <property column="cost" name="cost" type="int"/>
        <property column="profit" name="profit" type="int"/>
        <property column="organisator" name="organisator" type="string"/>
        <property column="period" name="period" type="int"/>
        <property column="food" name="food" type="string"/>
        <property column="transport" name="transport" type="string"/>
        <property column="persons" name="persons" type="int"/>
        <property column="kidsAmount" name="kidsAmount" type="int"/>
        <property column="idHotel" name="idHotel" type="int"/>
        <many-to-one name="place" column="idPlace" class="pl.th.java.biuro.hibernate.Place" not-null="true" cascade="all" />
    </class>
</hibernate-mapping>

Mapowanie "Place":

Kopiuj
 <hibernate-mapping>
    <class name="pl.th.java.biuro.hibernate.Place" table="Place">
        <id column="idPlace" name="idPlace" type="int">
            <generator class="native"/>
        </id>
        <property column="country" name="country" type="string"/>
        <property column="city" name="city" type="string"/>
        <property column="island" name="island" type="string"/>
        <property column="information" name="information" type="string"/>
    </class>
</hibernate-mapping>

Dodatkowo zamieszczam "wygląd" tych dwóch tabel w bazie MySQL:
user image

0

Cześć,

Próowałeś ustawić
<many-to-one fetch="subselect" ?

IN
Jeszcze nie, spróbuję gdy tylko będę miał możliwość, jednakże do wyboru są tylko "join" lub "select". Co dokładnie robiłby atrybut fetch w tym przypadku?
IN
Niestety nie pomogło. Czy miałbyś może jeszcze jakieś pomysły?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.