2016-04-05 2 views
1

как построить объект X & его отношение к P в этом сценарии? и использование аннотаций?Java: JPA Entity @OneToMany

Entity P, имеет 1 PT и xs (список x).

@Entity 
public class P { 

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @OneToOne 
    @JoinColumn(name = "pt_id") 
    private PT pt; 

    @OneToMany 
    private List<X> xs; 

    ... 
} 

@Entity 
public class PT { 
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 
    private String name; 
} 

хз является отфильтрованный список ST на основе PTST (ссылка таблица ST & PT), и оставили присоединиться значения P, хранящиеся в PV.

Таблица PV, имеет p_id, st_id, val.

пример:

P: 
id pt_id 
1  1 
2  2 
3  1 

PT: 
id name 
1  pt-1 
2  pt-2 

ST 
id t 
1  A 
2  B 
3  C 
4  D 
5  E 

PTST 
pt_id st_id 
1  1 
1  3 
2  1 
2  2 

PV 
p_id st_id val 
1  1  1a 
2  2  2b 

ожидается выход:

P = 1 
p_id st_id st_t val 
1  1  A   1a 
1  3  C   NULL 

P = 2 
p_id st_id st_t val 
2  1  A   NULL 
2  2  B   2b 

В настоящее время я использую ниже запроса, чтобы получить данные

select st.id as st_id, st.t, :p2 as p_id, pv.val 
      from PTST ptst 
      inner join ST st on (st.id = ptst.st_id) 
      left join PV pv on (pv.p_id = :p1 and pv.st_id = ptst.st_id) 
      where PTST.pt_id = :p3 

затем выход

p_id: 1, st_id: 1 t: A val: 1a 
p_id: 1, st_id: 3 t: C val: NULL 

любой совет? Спасибо.

Update:

запрос выше вручную получить данные для нечистого объекта X, который я хочу, чтобы автоматизировать его (не более родной запрос).

Update2:

@Entity 
@Table(name = "PV") 
public class X{ 

    @EmbeddedId 
    private Y id = new Y(); 

    @Column(updatable = false, insertable = false) 
    private String st_t; 
    private String val; 
} 


@Embeddable 
public class Y implements Serializable { 
    @Column(updatable = false) 
    private int p_id; 
    @Column(updatable = false) 
    private int st_id; 
} 
+0

Ваш вопрос довольно непонятен. См. [How To Ask] (http://stackoverflow.com/help/how-to-ask). –

+0

@ Николас вопрос обновлен, ум совет снова. Спасибо. – user5917360

+0

где - определение класса PT и X? –

ответ

0

Ну, он смотрит на меня, на основе имен столбцов, что список ST находится в ПТ лица:

@Entity 
public class PT { 
    @Id 
    private Integer id; 
    private String name; 

    @ManyToMany 
    @JoinTable(name="PTST") 
    List<ST> st; 

Это было бы создать таблицу присоединиться к имени PTST с два столбца ID в нем, но вы не сможете использовать его в качестве запроса так, как вы делаете, с запросом, который вы указали. Я полагаю, вы могли бы создать сущность с составным ключом для таблицы PTST, а затем вы могли бы сделать запрос JPQL, но так как в запросе, который вы показывали, используются именованные параметры, которые, я думаю, доступны только в JPQL, кажется у вас уже есть такая Сущность.

enter image description here

+0

извините за путаницу. Да PT имеет список ST и наоборот, но то, что у меня заканчивается, - это объект X. Запрос JPQL - это ручной способ получить данные с нечистым объектом X. дополнительные проверки и другой запрос, требуемый, когда нужно создавать или обновить до PV. так есть ли лучший/автоматический способ сделать это без ручного запроса?следует ли переименовать вопрос для автоматического извлечения данных или преобразования запроса в объект? еще раз спасибо. – user5917360

+0

im not remove Список xs from P. Я хочу использовать аннотацию 1ToM/etc для ссылки P & List xs, поэтому ORM может построить сам запрос и вернуть результат. для этого, как выглядит объект X? его свойства, аннотации к другому объекту. – user5917360

+0

нечистый объект X, обновленный в вопросе. Спасибо. – user5917360

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