当我试图对泛型类型执行TypedQuery时,我会从Eclipse得到一个未检查的类型转换警告。
我在这里使用泛型,因为在数据集中,由于查询和编辑的时间限制,每年都必须分离到不同的表中。表中有118年的数据(自1900年以来),我希望构建一个可以使用Java Reflections API每年扩展自己的系统。但是,这意味着在编译之前,我的父类不知道它们将对哪个子类或表进行操作。
下面是一些代码的示例,即使我通过TypedQuery指定了所有内容的类型,这些代码也会导致未检查的警告。我的代码将编译和运行在我的数据库中。
public class MyParentRepository<T extends MyParentPojo>
{
@PersistenceContext
private EntityManager em;
private Class<T> tea;
public MyParentRepository(Class<T> tea)
{
this.tea = tea;
}
public void giveWarning(int year)
{
String sql = String.format("SELECT * FROM mytable%d t", year);
TypedQuery<T> resultSet = (TypedQuery<T>) em.createNativeQuery(sql, tea);
}
}
预期的结果是,由于tea被保证用泛型类型实例化,因为它在任何地方都是相同的类型,一旦实例化就不能更改,所以编译器应该理解实体管理器也将返回类型的TypedQuery。但是,即使保证可以工作,也会导致未检查的类型警告。
我见过有人建议通过从查询转到TypedQuery来修复未检查类型警告,但在这种情况下这并没有帮助。有没有一种方法可以避免这个警告,同时还在做我正在尝试做的事情?
针对一个被删除的答案,我想澄清一些事情。
em.createQuery(String)
em.createQuery(String, Class<T>)
em.createNativeQuery(String)
em.createNativeQuery(String, Class)
在我看来,如果我给它一个适当类型的POJO,选项4应该像选项2那样解决如何序列化它。实际上是这样的,但是它没有像选项2那样正确地设置类型。从我的角度来看,这是不可接受的,因为不是每个SQL查询都可以用JPQL查询表示,所以有时我需要使用SQL,我希望返回一个TypedQuery。
我已经通过切换到选项2解决了警告,但我仍然想知道答案,以防如我所说的那样,将来出现无法使用选项2的情况。
这是因为createNamedQuery
返回query
而不是typedQuery
,即使在“typed result”变量中也是如此。https://docs.oracle.com/javaee/7/api/javax/persistence/query.html
问题内容: 我正在通过以下方式从Java代码启动Windows进程(用C ++编写,但没有源代码): 我的问题是,waitFor()方法永远不会结束。因此,我尝试在一个简单的shell中启动该过程,并以shell中的许多打印正确结束(我猜是标准输出)。 因此,即使我现在不需要这些输出,我还是决定创建并启动一个读取标准输出的线程。这解决了问题。 因此,我的问题是以下问题:该解决方案是“启动并等待具有
我在客户端使用vue、vue路由器,在服务器端使用express、morgan(MEVN应用程序) 在客户端我用vue cookie设置cookie 在服务器端,我使用CookieParser 所以,在应用程序。我有这样的代码 并且,在文件中,我有这样一个GET请求的代码 问题是,var loginHash=req.cookies['Login'];总是返回未定义的,即使我有登录cookie 添加
根据JSON规范,表示null值的正确方法是文字。 预期结果: 实际结果:
问题内容: 以下是ajax请求。 这就是delete.php 运行代码后,它将成功删除文件,但不会显示任何消息。 我也尝试将ajax请求更改为: 仍然不显示该消息。所以我想在delete.php文件中出了点问题。请帮忙。 问题答案: 进行jquery + ajax + php的最佳方法如下: jQuery的: PHP:
问题内容: 我正在编写一个PHP脚本,用于通过Linux shell命令使用PHP调用它来检查网络连接: 我没有从ping获得错误消息的输出,这是我期望的: 如果该域是一个很好的域,例如yahoo.com,则将ping中的输出输出到数组中。但是,如果这是一个错误,例如它不会返回到数组。 为什么会发生这种情况,有更好的方法吗? 问题答案: 您应该将stderr重定向到stdout。 为此,请像这样更
为什么会 返回False,但是 不返回True,而是返回对象在内存中的位置。我找不到一种方法让这句话变为真,但我知道这是真的,因为: 返回"Yes!"。 正如我所说,这没有实际意义,至少目前没有,但它确实让我感到困惑。