2014-12-09 3 views
0

У меня таблицы клиента с параметрами:JPA OneToMany отношение на выделенном параметре/колонке

@Entity 
public class Customer { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public Long id; 
    public Long id_crm; 
    public String City; 
    public String Country; 

и вторую таблицу, где я хранить некоторую контактную информацию.

@Entity 
public class CustomerContact { 
    @Id 
    public Long id; 
    public Role role; 
    public Department department; 
    public Long customer_id_crm 
} 

Вторая таблица получается из внешнего приложения УРКА поэтому я добавил колонку id_crm для связи в качестве внешнего ключа.

Я хотел бы сделать связь между этими 2 лицами на колонке: Customer.id_crm и CustomerContact.customer_id_crm

SQL-запрос для этого будет выглядеть следующим образом:

Select * FROM Customer 
Join CustomerContact 
on Customer.id_crm=CustomerContact.customer_id_crm 

Могу ли я даже достичь этого с JPA? Если так? Как это сделать?

+0

Вы используете сложный ключ или простой ключ, я отправляю код для создания отношений. Я использую свой код для демонстрации, а не ваш, проверьте ответ за 5 минут. –

+0

Что вы ищете? Отображения? Какова связь между Клиентом и Клиентом, индивидуально, один-ко-многим? –

+0

Нет никакого отношения. Я собираюсь это сделать. Но я должен использовать другой столбец как внешний ключ в таблице контактов. – masterdany88

ответ

0

Попробуйте с этим

session.createQuery("select c, cc from Customer c, CustomerContact cc where c.id_crm = cc.customer_id_crm") 
0

Здесь есть человек класс, который имеет отношение один ко многим с холстом:

@Entity 
@Table(name="person") 
public class Person implements UserDetails{ 


    @Id 
    @Column(name="id") 
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "person_seq_gen") 
    @SequenceGenerator(name = "person_seq_gen",sequenceName = "person_seq") 
    private int id; 
@OneToMany(mappedBy = "person1",fetch = FetchType.EAGER,cascade = CascadeType.REMOVE) 
    private Set<Canvas> canvas1 = new HashSet<Canvas>(); 

    public Set<Canvas> getCanvas1() { 
     return canvas1; 
    } 

    public void setCanvas1(Set<Canvas> canvas1) { 

     this.canvas1 = canvas1; 
    } 
} 

Холст Модель:

@Entity 
@Table(name = "canvas") 
public class Canvas { 

    @Id 
    @Column(name="canvasid") 
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "canvas_gen") 
    @SequenceGenerator(name = "canvas_gen",sequenceName = "canvas_seq") 
    private int canvasid; 

@ManyToOne 
    @JoinColumn(name = "id",nullable = false) 
    @JsonIgnore 
    private Person person1; 

    public Person getPerson1() { 
     return person1; 
    } 

    public void setPerson1(Person person1) { 
     this.person1 = person1; 
    } 

    public int getPerson1id(){ 
     return this.person1.getId(); 
    } 
} 

Вот DAOImpl, когда вам хочу добавить холст:

public void addCanvas(Canvas canvas, Person person) { 
     int id = person.getId(); 
     if(session == null) { 
      session = this.sessionFactory.openSession(); 
     }else { 
      session = this.sessionFactory.getCurrentSession(); 
     } 
     Person person1 = (Person) session.get(Person.class,id); 
     person.getCanvas1().add(canvas); 
     canvas.setPerson1(person1); 
     session.merge(canvas); 
     session.flush(); 

    } 

И у меня есть метод, аналогичный Ваш запрос:

public List<Canvas> listCanvasPerson(Person person) { 
     int id = person.getId(); 
     if(session == null){ 
      session = this.sessionFactory.openSession(); 
     } else{ 
      session = this.sessionFactory.getCurrentSession(); 
     } 

     Query query = session.createQuery("from Canvas as c where c.person1.id=:id order by c.canvasnumber"); 
     query.setParameter("id",id); 
     List<Canvas> canvasList = query.list(); 

Надеется, что это помогает, если я сделал ошибку где-то, дайте мне знать. Пожалуйста, поймите, я использую простой ключ, а не сложный ключ.

+0

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

+0

Сессия не является JPA. Вопрос касается JPA –

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