2015-09-07 2 views
0

У меня есть два класса Java Match (совпадение в крикете) и мяч. В матче будет много мячей, и каждый мяч станет частью матча. Мне нужно зимует отображение между этими двумя классами таким образом,Hibernate ORM-сопоставление между Java-классами

  1. , если я позвоню сэкономить на объекте матча, он должен быть в состоянии сохраняться все содержащие шары в шаре таблице и оставшихся деталях матча в таблице соответствий.

  2. Если я вызываю сохранение или обновление объекта шара, сначала он должен перейти в таблицу соответствия, чтобы проверить, доступен ли идентификатор соответствия, присутствующий в объекте шара, или нет. Если он есть, он должен сохранять или обновлять мяч в шаровой таблице.

Если кто-либо не знает отношения Match-Ball в крикете, он может думать как отношение к мячу ног - отношение к цели. В матче может быть n количество голов, и каждый гол будет частью матча. Сохранение соответствия также должно быть в состоянии сохранить все содержащиеся цели в таблице целей, а сохранение цели цели должно проверяться в таблице соответствия с ее идентификатором, а затем должно сохранять детали цели в таблице целей.

Спасибо.

ответ

1

Я думаю, что это @ManyToOne и @OneToMany аннотации будут работать для вас. Если вы сохраните объект Match, который будет (должен) содержать список целей, каждая цель будет сохраняться с совпадением.

Match.java

import javax.persistence.*; 
import java.util.List; 

@Entity 
@Table(name = "match") 
public class Match { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    protected Integer id; 

    @JsonBackReference 
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinTable(name = "goal", joinColumns = { 
     @JoinColumn(name = "match_id", nullable = false, updatable = false) }, 
     inverseJoinColumns = { @JoinColumn(name = "goal_id", 
       nullable = false, updatable = false) }) 
    protected List<Goal> goals; 
} 

Goal.java класс

import javax.persistence.*; 
import java.util.List; 

@Entity 
@Table(name = "goal") 
public class Goal { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    protected Integer id; 

    @JsonBackReference 
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinTable(name = "match", joinColumns = { 
     @JoinColumn(name = "goal_id", nullable = false, updatable = false) }, 
     inverseJoinColumns = { @JoinColumn(name = "match_id", 
       nullable = false, updatable = false) }) 
    protected Match matche; 

} 
+0

Спасибо !! Одна цель не может быть частью многих матчей. Это часть одного матча. Это много-к-одному по цели. Даже если я собираюсь сохранить цель, я не хочу сохранять совпадение, я просто хочу проверить, присутствует ли там матч или нет. Если он отсутствует, он также сохранит совпадение. Обновите свой ответ на основе этого комментария. –

+0

Спасибо за обновление. Однако в классе Match это должен быть OneToMany. Пожалуйста, обновите соответствующим образом. –

+0

Это сработало для вас? – Pras

1
  • Match:

@OneToMany(mappedBy = "match", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) private Set<Ball> balls;

    Класс
  • Болл:

@ManyToOne @JoinColumn(name = "MATCH_ID", nullable = false) private Match match;

+0

Спасибо, Pras! Это было полезно. –

Смежные вопросы