Персистентность Java: Бросок к чему-то результат Query.getResultList ()?

Я использовал один вкладыш, который приводит к сплющенной схеме с 5 столбцами bar, baz, x, y, z:

df.select("foo.*", "x", "y", "z")

Что касается explode: я обычно резервирую explode для выравнивания списка. Например, если у вас есть столбец idList, представляющий собой список строк, вы можете сделать:

df.withColumn("flattenedId", functions.explode(col("idList")))
  .drop("idList")

Это приведет к созданию нового информационного кадра со столбцом с именем flattenedId (больше не будет списком)

31
задан GuiSim 5 June 2009 в 18:34
поделиться

3 ответа

Note: This answer is outdated as of JPA 2.0, which allows you to specify the expected type. See this answer.


Suppressing the warning with

@SuppressWarnings("unchecked")
List<MyType> result = (List<MyType>) query.getResultList();

is the only solution to this problem I have ever seen. The suppression is ugly, but you can trust JPA to return the right type of object, so there is no need to check manually.

If you use polymorphisms and don't know the exact result type, the use of Generics with a bounded Class parameter is also a common pattern:

public List<T extends MyBaseType> findMyType(Class<T> type) {
    @SuppressWarnings("unchecked")
    List<T> result = (List<T>) this.entityManager.createQuery(
        "FROM " + type.getName())
        .getResultList();
    return result;
}
9
ответ дан 27 November 2019 в 21:42
поделиться

Ну, есть решение класса java Collections, но вы не объяснили, почему не удалось выполнить приведение, или если оно просто выдавало предупреждение ...

Это один из способов проверьте это:

Collections.checkList(lQuery.getResultList(), Person.class);

Но если вам не нужно это проверять:

@SuppressWarnings("unchecked") List<Person> personList = lQuery.getResultList();
3
ответ дан 27 November 2019 в 21:42
поделиться

Я тоже какое-то время сталкивался с этой проблемой. Вы можете перебирать список и проверять, но я бы предпочел меньше шума. Самый короткий способ, который я видел, - это отключить предупреждение, но мне это также очень неудобно. Мне было бы интересно увидеть другие решения.

@SuppressWarnings("unchecked") 
List<Person> personList = lQuery.getResultList();

Хм, исследуя, я нашел интересную запись на java.net. Мне особенно интересны комментарии пользователей.

1
ответ дан 27 November 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: