小编Ala*_*ect的帖子

将IN子句列表添加到JPA查询中

我已经构建了一个看起来像这样的NamedQuery:

@NamedQuery(name = "EventLog.viewDatesInclude",
        query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
        + "el.timeMark <= :dateTo AND "
        + "el.name IN (:inclList)")
Run Code Online (Sandbox Code Playgroud)

我想要做的是填写参数:inclList与项目列表而不是一个项目.例如,如果我有一个new List<String>() { "a", "b", "c" }如何在:inclList参数中得到它?它只允许我编纂一个字符串.例如:

setParameter("inclList", "a") // works

setParameter("inclList", "a, b") // does not work

setParameter("inclList", "'a', 'b'") // does not work

setParameter("inclList", list) // throws an exception
Run Code Online (Sandbox Code Playgroud)

我知道我可以构建一个字符串并从中构建整个Query,但我想避免开销.有没有更好的方法呢?

相关问题:如果List非常大,有没有什么好的方法来构建这样的查询?

java jpa jpql

116
推荐指数
4
解决办法
23万
查看次数

如何计算getBBox()SVGRect?

我有一个g包含一个或多个path元素的元素.正如我在另一个问题中提到的,我g通过计算transform属性来缩放和转换元素,以便它适合画布另一部分的网格.

使用两个矩形之间的差异来完成计算,getBBox()g元素和网格周围的矩形.

这是一个问题 - 在我进行转换之后,我更新g元素的内容并getBBox()再次调用,而不删除transform.生成的矩形似乎是在不考虑的情况下计算出来的transform.我原以为它会反映这种变化.这种行为是否与SVG规范一致?如何获取变换矩形的边界框?

BTW,这是在Firefox 4中运行的HTML 5文档,如果这有任何区别的话.

更新:显然这种行为似乎很明显违反了规范.从w3c的文字:

SVGRect getBBox()

返回当前用户空间中的紧束缚框(即,在应用'transform'属性后,如果有的话)在所有包含的图形元素的几何上,不包括描边,剪切,蒙版和滤镜效果).请注意,getBBox必须在调用方法时返回实际的边界框,即使元素尚未呈现.

我读得对吗?如果是这样,这似乎是Firefox使用的SVG实现中的勘误表; 我没有机会尝试任何其他的.如果有人能指出我在哪里,我会提交错误报告.

svg

38
推荐指数
3
解决办法
5万
查看次数

CDI注入FacesConverter

从一些搜索来看,这似乎已经存在了一段时间的问题.我写了一个看起来如下的FacesConverter.对象Category是JPA实体,CategoryControl是获取它的DAO.

@FacesConverter(value = "categoryConverter")
public class CategoryConverter implements Converter {

@Inject private CategoryControl cc;

public CategoryConverter() { }

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    if (cc != null) return cc.getByName(value);
    System.out.println("CategoryConverter().getAsObject(): no injection!");
    return null;
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    if (!(value instanceof Category)) return null;
    return ((Category) value).getName();
}

}
Run Code Online (Sandbox Code Playgroud)

你可能已经猜到了,我从来没有注射过.我从这个页面得到了这个解决方法,看起来像这样:

Workaround for this problem: create this method in your localeController: 

public Converter …
Run Code Online (Sandbox Code Playgroud)

myfaces cdi jsf-2

30
推荐指数
2
解决办法
2万
查看次数

如何摆脱警告:PWC4011:无法将请求字符编码设置为UTF-8

这是在GlassFish 3.1上,使用PrimeFaces而不是Mojarra,并使用MyFaces CODI进行腌制.几乎每个请求都会出现以下消息:

警告:PWC4011:无法从上下文/com.myapp_war_0.1将请求字符编码设置为UTF-8,因为已经读取了请求参数,或者已经调用了ServletRequest.getReader()

自从我开始这个项目以来,这已经发生了 - 到目前为止,我一直忽视它,但现在我已经意识到我浪费了很多时间阅读它.我在这里发现了一个有趣但不完整的工作,但我不明白.

有人可以建议如何在不抑制其他可能的警告消息的情况下压缩此消息吗?

primefaces jsf-2 glassfish-3 mojarra

22
推荐指数
1
解决办法
2万
查看次数

使用<ui:composition>模板时,我应该在哪里声明<f:metadata>?

我在将我的JSF应用程序转换为可书籍标记的页面方面取得了很大进展,但我想知道我是否以正确的方式进行操作.一个问题是f:元数据标签是否有最佳实践位置?

我的典型Facelets客户端页面如下所示:

    <ui:composition template="./pattern.xhtml">

        <ui:define name="content">

            <f:metadata>
                <f:viewParam name="userId" value="#{bean.userId}" />
                <f:viewParam name="startRecord" value="#{bean.startRecord}" />
                <f:viewParam name="pageSize" value="#{bean.pageSize}" />
                <f:viewParam name="sort" value="#{bean.sort}" />
            </f:metadata>

            <h1>Data Table</h1>

etc
Run Code Online (Sandbox Code Playgroud)

所以f:metadata和child f:viewParam标签在我的页面正文中遇到.我的pattern.xhtml模板还有一个部分(名为"header"),可以将这些标记放在标题部分.它们应该放在那里吗?它是否有所作为,或者我是否设置了一些我尚未见过的副作用?

jsf metadata facelets templating composition

21
推荐指数
1
解决办法
2万
查看次数

如何在Maven上创建/使用Netbeans的类库?

这似乎是一个愚蠢的问题,但我依赖于Netbeans 7.1向导.似乎没有选择这样做.

我的网络应用程序是用Maven构建的,我想把它的一些软件包分解成一个独立构建和维护的类库(具体来说,JPA部分,但这应该不重要.)然后我想删除那些包原始Web应用程序,然后创建我创建的工件的依赖项.

那么我该如何开始呢?对于"Java类库",Netbeans New-Project向导似乎没有像ANT构建项目那样的选项.我能看到的最接近的选择是"Java Application".这是我使用的,只是忽略主类或是否有一些我看不到的路径?

我通常很擅长选择这些东西,但我的网络搜索并没有产生太大的影响.非常感谢任何帮助.

maven-3 maven netbeans-7

19
推荐指数
1
解决办法
7774
查看次数

为什么NetBeans IDE没有看到生成的源?

我有一个Maven构建的Web应用程序,后端使用JPA 2.0.JPA提供程序是EclipseLink 2.3.2.

当我构建项目(并且它成功部署运行)时,它在目录中构建JPA元模型

${basedir}/target/generated-sources/annotations/
Run Code Online (Sandbox Code Playgroud)

但IDE没有看到那里定义的类.到处都有感叹号的小红点.然而,我可以在" 项目"窗口中导航到这些文件,然后打开生成的源文件.

这是否发生在其他人身上,是否有人知道修复它的方法?

更新:

作为一种解决方法,我发现我可以退出NetBeans,删除NetBeans缓存目录,然后重新启动.这会强制NetBeans重建缓存,然后类再次可见.我应该向NetBeans错误跟踪器提交错误吗?我无法想出一个测试案例来实现它,但它确实经常发生.

netbeans eclipselink maven netbeans-7

19
推荐指数
2
解决办法
7800
查看次数

UserTransaction和EntityManager如何交互?

这是一个学术问题; 我没有破坏与此相关的代码.我只是想扩大我对引擎盖下发生的事情的理解.

我在我的JPA DAO中使用的代码模式(从书籍和教程中复制)用于我的典型JSF Web应用程序基本上是这样的:

public class someDAO {

    @PersistenceContext protected EntityManager   em;
    @Resource           private   UserTransaction utx;    

    public void persist(Entity entity) {
        try {
            utx.begin();
            em.persist(entity);
            utx.commit();
        } catch ( // gawd awful long list of possible exceptions ) 

        // etc
Run Code Online (Sandbox Code Playgroud)

所以我的问题如下:

  1. 为什么EntityManager实例和UserTransaction实例注入了来自两个看似无关的包的注释?

  2. 为什么注释@Resource和@PersistenceContext而不是@ManagedProperty或@Inject使用?

  3. persist()方法如何访问utx对象并与之交互?如果我忘记了utx.begin()调用,实体管理器就会知道它并抛出异常.它必须以某种神奇的方式找到UserTransaction对象.是不是更好的架构来定义接口,如: em.persist(utx,entity)

  4. 如果utx是某种单例 - 是否可以一次打开多个UserTransaction?

非常感谢任何讨论.

jpa jsf-2 jpa-2.0

16
推荐指数
1
解决办法
2万
查看次数

我如何使用@ConversationScoped

我正在编写一个JSF 2.0应用程序,我想使用CDI注释而不是"等效"JSF注释.换句话说,@ Model或@Named代替@ManagedBean,而@Inject代替@ManagedProperty.

我唯一无法工作的是@ViewScoped,它是AJAX组件所必需的.唯一可靠的解决方法是使用@SessionScoped,这不是一个好习惯.

什么是正确的做法?就像我搜索一样,我变得更加困惑.

这是在GlassFish 3.1.1上,我理解其中有Weld 1.1.0.

更新:这个问题的原始形式说我无法让@ConversationScoped工作.从那以后我发现了我的错误,我确实让它像这样工作:

@Model
@ConversationScoped
public class Abean implements Serializable {

@Inject Conversation conversation;

// stuff omitted for brevity

public String getSomething() {
    if (conversation.isTransient()) conversation.begin();
    return "something";
}
Run Code Online (Sandbox Code Playgroud)

这似乎可以解决问题.但是现在我的问题已经改变了.你应该在哪里调用conversation.end()?我是否必须编写过滤器来检测用户何时离开页面?或者,如果它被单独留下,那么Abean实例何时被取消引用?

第二次更新:我在这里找到关于CDI的@ConversationScoped的非常好的讨论.

我仍然留下如何调用conversation.end()的问题.我的bean为通过AJAX更新的数据表浏览器提供有状态的支持,并且调用end()的最佳位置是用户导航离开页面.但是,如果没有编写过滤器来监控页面,我实际上并没有看到任何方法.任何关于"最佳实践"的建议都是受欢迎的.

cdi jsf-2 glassfish-3

12
推荐指数
1
解决办法
4762
查看次数

如何从EclipseLink中捕获约束违规异常?

我在我的Web应用程序中使用EclipseLink,我很难优雅地捕获和处理它生成的异常.我从这个线程看到似乎是一个类似的问题,但我没有看到如何解决或修复它.

我的代码看起来像这样:

public void persist(Category category) {
    try {
        utx.begin();
        em.persist(category);
        utx.commit();
    } catch (RollbackException ex) {
           // Log something
    } catch (HeuristicMixedException ex) {
           // Log something
    } catch (HeuristicRollbackException ex) {
           // Log something
    } catch (SecurityException ex) {
           // Log something
    } catch (IllegalStateException ex) {
           // Log something
    } catch (NotSupportedException ex) {
           // Log something
    } catch (SystemException ex) {
           // Log something
    }
}
Run Code Online (Sandbox Code Playgroud)

当使用违反唯一性约束的实体调用persist()时,我会收到容器捕获和记录的异常爆炸.

Exception [EclipseLink-4002] (Eclipse Persistence Services …
Run Code Online (Sandbox Code Playgroud)

jpa eclipselink jpa-2.0

12
推荐指数
1
解决办法
2万
查看次数