JPA2: Как сопоставить только определенные строки таблицы с сущностью? - PullRequest
3 голосов
/ 19 января 2011

У меня есть таблица, которую я не могу изменить приблизительно с этой структурой

ID, name, purpose, rubbish...
1, foo, PRICING, ...
2, bar, INVENTORY, ...
3, bar, PRICING, ...

Какой предпочтительный способ отобразить только линии с целью = ЦЕНА для сущности?Есть ли способ сделать это с помощью аннотаций JPA или мне нужно представление?

Ответы [ 3 ]

4 голосов
/ 19 января 2011

Вы можете использовать стратегию наследования SINGLE_TABLE и использовать «цель» в качестве столбца дискриминатора, например:

@Entity
@Table(name="THE_TABLE")
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(name="purpose", discriminatorType=STRING)
@DiscriminatorValue("PRICING")
public class Pricing{ ... }
0 голосов
/ 19 января 2011

Если я правильно понимаю ваш вопрос, вы пытаетесь выбрать только те строки, где цель = цена.

Есть основные шаги: (1) создать объект, (2) создать запрос.Сущность будет использовать аннотации и будет похожа на это:

 @Entity 
 public class Foo
  { 
    String name;
    String inventory; 
    ....
  }     

Затем вы просто создаете и выполняете запрос:

.....
    @PersistenceContext
EntityManager entityManager;

 .....
 public List<Foo> getAllWithPricing()
 {
     return entityManager.createQuery("select o from Foo o where o.purpose='PRICING'", Foo.class).getResultList()

 } 
0 голосов
/ 19 января 2011

Я не думаю, что чистый JPA поддерживает это.

Если вы используете Hibernate, вы можете использовать фильтры. Хорошие примеры можно найти здесь .

Это один пример, когда использование расширений, специфичных для поставщика, действительно приятно, но они ограничивают вас одной реализацией. Возможно, другие реализации (OpenJPA, EclipseLink ...) также поддерживают это, но я еще не рассматривал их.

...