Spring Data JPA - как запросить таблицу без класса сущности? - PullRequest
0 голосов
/ 19 июня 2020

Я работаю над следующими таблицами базы данных:

  • users таблица - Каждая строка представляет пользователя в системе. Он имеет ограничение внешнего ключа для таблицы стран.
  • countries таблица - каждая строка представляет страну, и каждая страна может иметь список dialects, хранящийся в диалектах таблицы.

введите описание изображения здесь

Я использую данные Spring JPA и создал следующие классы сущностей

public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "full_name")
    private String fullName;

    @Column(name = "createdAt")
    private Date createdAt;

    @Column(name = "country_code")
    private Integer countryCode;

    @Column(name = "dialect_key")
    private String dialectKey;
}

public class Country {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer country_code;

    @Column(name = "name")
    private String name;

    @Column(name = "continent_name")
    private String continentName;

    @ElementCollection
    @CollectionTable(name = "Dialect", joinColumns = { @JoinColumn(name = "country_code") })
    private List<Dialect> dialectList;
}


@Embeddable
public class Dialect {
   private String name;
}

Теперь у меня есть вариант использования, в котором мне нужно получить full name и dialect name для заданного пользователя.

Select u.full_name, d.name from users u
join countries c on u.country_code = c.country_code
join dialects d on c.country_code = d.country_code
where u.id = :user_id and u.dialect_key = d.dialect_key

Вопрос. Вышеупомянутый запрос отлично работает, когда выполняется как собственный запрос и возвращает список объектов. Далее я сопоставляю список объектов со списком POJO. Есть ли лучший способ сделать это, чтобы явно избежать преобразования Object -> POJO?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...