小编mab*_*abi的帖子

如何在不获取完整实体的情况下获取从属Hibernate实体的外键列值?

我正在努力解决一个似乎太容易的问题:

安装程序是两个在Hibernate 3中具有多对一关系的实体:

@Entity
class M {
  private N n;
  @ManyToOne(fetch = FetchType.LAZY)
  public N getN() { return n; }
  public void setN(N n) { this.n = n; }
}

@Entity
class N {
  private List<M> ms = new ArrayList<M>();
  @OneToMany(mappedBy="n")
  public List<M> getMs() { return ms; }
  public void setMs(List<M> ms) { this.ms = ms; }
}
Run Code Online (Sandbox Code Playgroud)

很容易.在我的应用程序中,我有一个Ms或者没有的列表N.此列表是h:dataTable显示不同列内容的输入,具体取决于FK是否为空.但是当我测试m.getN() != null这个导致hibernate加载时N.我怎么能避免这个?

编辑:这实际上是我的错误,正如JBNizet在评论中指出的那样.为了至少使这对某人有用并与上面的布局保持一致,我将问题改为"如何在不获取完整实体的情况下获取依赖Hibernate实体的外键列值?" 正如Aaron Digulla所说.

编辑2:结果新问题是这个问题的重复:当我只访问外键id时,如何防止Hibernate获取连接的实体? - 所以,投票结束?

java hibernate

9
推荐指数
1
解决办法
2624
查看次数

如何使用Intellij IDEA从版本控制中删除文件夹(但不删除它)?

我知道我可以在某处复制文件,删除(svn)控制的东西并将文件移回.但这似乎是一个在IDE中自动执行的简单任务,所以...我错过了什么?我可以只是"取消标记"一个目录,以便它从VCS中删除但保留在磁盘上以及如何?

intellij-idea

8
推荐指数
2
解决办法
7378
查看次数

如何为单向关系构造反向连接?

我想这很容易,但我无法弄清楚.

如果我有实体Foo和Bar:

@Entity
class Foo{
   @OneToMany
   List<Bar> bars;
}

@Entity
class Bar{
   @Column
   int data;
}
Run Code Online (Sandbox Code Playgroud)

如果我想创建一个Join(javax.persistence.criteria.Join<Foo, Bar>)对象,我可以这样做:

Root<Foo> root = ...;
Join<Foo,Bar> join = root.join(Foo_.bars);
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能进行反向连接

Join<Bar,Foo> inverseJoin = barRoot.join....()...?
Run Code Online (Sandbox Code Playgroud)

因为我在类Bar中没有指向它的Foo父类的java字段,它是单向关系?

java jpa join eclipselink criteria-api

7
推荐指数
1
解决办法
1668
查看次数

在特定目录中找到文件

我有一个简单的问题:我使用Files.walkFileTree如下迭代一个大而深度嵌套的目录结构:

final int CUTOFF = 5;
final List<Path> foundList = new ArrayList<>();
Files.walkFileTree( codeRoot, new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
             throws IOException {
        String rPath = codeRoot.relativize( dir ).toString();
        int level = rPath.length() - rPath.replace("/", "").length();
        if (dir.getFileName().toString().equals( "target" ) || level < CUTOFF) {
            return FileVisitResult.CONTINUE;
        }
        return FileVisitResult.SKIP_SUBTREE;
    }
    @Override
    public FileVisitResult visitFile( Path file, BasicFileAttributes attrs ) 
            throws IOException {
        if (file.getFileName().toString().endsWith( ".txt" )) {
            foundList.add( file );
        }
        return FileVisitResult.CONTINUE; …
Run Code Online (Sandbox Code Playgroud)

java nio

6
推荐指数
1
解决办法
151
查看次数

将列表值按顺序传递给单值消费者的最佳方法?

我正在玩弄 Java8 的流和CompletableFutures。我预先存在的代码有一个类,它接受一个 URL 并下载它:

public class FileDownloader implements Runnable {
    private URL target;
    public FileDownloader(String target) {
        this.target = new URL(target);
    }
    public void run() { /* do it */ }
}
Run Code Online (Sandbox Code Playgroud)

现在,这个类从另一个发出的部分List<String>(单个主机上的多个目标)获取它的信息。

我已将周围的代码切换为CompletableFuture

public class Downloader {
    public static void main(String[] args) {
        List<String> hosts = fetchTargetHosts();
        for (String host : hosts) {
            HostDownloader worker = new HostDownloader(host);
            CompletableFuture<List<String>> future = 
                CompletableFuture.supplyAsync(worker);
            future.thenAcceptAsync((files) -> {
                for (String target : files) {
                    new …
Run Code Online (Sandbox Code Playgroud)

java producer-consumer java-8 completable-future

5
推荐指数
1
解决办法
1335
查看次数

如果实体的所有字段都为空,我如何跳过bean验证?

我有一个像这样的地址实体:

@Entity
public class Address implements java.io.Serializable {
    @Id @GeneratedValue(strategy = IDENTITY)
    private Long id;

    @Size(max = 100)
    private String street;

    @Size(max = 15)
    private String nr;

    @Field
    @Size(min = 1, max = 20) @NotBlank
    private String city;
}
Run Code Online (Sandbox Code Playgroud)

这是其他几个实体的一部分.对于一个这样的实体,地址是可选的.我有一个视图,我们的用户可以通过几个表单输入编辑整个实体,包括几个地址字段.

为了能够编辑地址,我使用空地址实体初始化父实体.

现在问题是:Address当所有地址字段都为空时,我不想在实体上持久存在.为了实现这一点,我需要跳过实体的验证,如果(并且仅当)所有字段Address都为空.我该如何以最优雅的方式做到这一点?

我目前正在做的是完全跳过bean验证和<o:validateBean disabled="true" />提交按钮,null如果它是空的,则设置地址.但这听起来像是一个完全黑客,因为它在所有情况下禁用所有验证.我怎么能做得更好?

bean-validation jsf-2 omnifaces

4
推荐指数
1
解决办法
2111
查看次数

我可以在RestEasy中指定用于方法结果转换的jackson @JsonView吗?

我正在使用基于的序列化模型@JsonView.我通常用ContextResolver这样的方式配置jackson :

@Override
public ObjectMapper getContext(Class<?> aClass) {
    // enable a view by default, else Views are not processed
    Class view = Object.class;
    if (aClass.getPackage().getName().startsWith("my.company.entity")) {
        view = getViewNameForClass(aClass);
    }
    objectMapper.setSerializationConfig(
         objectMapper.getSerializationConfig().withView(view));
    return objectMapper;
}
Run Code Online (Sandbox Code Playgroud)

如果我序列化单个实体,这可以正常工作.但是,对于某些用例,我想使用与单个实体相同的视图序列化我的实体列表.在这种情况下,aClassArrayList,所以通常的逻辑没有多大帮助.

所以我正在寻找一种方法告诉杰克逊使用哪种观点.理想情况下,我写道:

@GET @Produces("application/json; charset=UTF-8")
@JsonView(JSONEntity.class)
public List<T> getAll(@Context UriInfo uriInfo) {
    return getAll(uriInfo.getQueryParameters());
}
Run Code Online (Sandbox Code Playgroud)

并且在视图下序列化了JSONEntity.RestEasy有可能吗?如果没有,我怎么能效仿呢?

编辑:我知道我可以自己进行序列化:

public String getAll(@Context UriInfo info, @Context Providers factory) {
    List<T> entities = getAll(info.getQueryParameters());
    ObjectMapper mapper = factory.getContextResolver( …
Run Code Online (Sandbox Code Playgroud)

serialization resteasy jackson wildfly

3
推荐指数
1
解决办法
1695
查看次数

带有 Fontawesome 图标的工具提示

我想使用fontawesome作为工具提示文本,但我不知道如何实现它。它与覆盖面板一起使用,但我想使用标签<p:tooltip>

我使用 primefaces 4.0 和 jsf 2.1 这是带有工具提示的代码

<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet" />
<p:graphicImage id="grap" class="fa fa-question-circle fa-2x"/>
<p:tooltip for="grap" value="Some Help" showEffect="fade" />
Run Code Online (Sandbox Code Playgroud)

如果我使用以下内容,它会起作用

<h:panelGroup id="mail" class="fa fa-question-circle fa-2x" />
 <p:overlayPanel for="mail" showEvent="mouseover" hideEvent="mouseout" hideEffect="fade">
   <p:panel>
         TEXTTEXTTEXT
   </p:panel>
  </p:overlayPanel>
Run Code Online (Sandbox Code Playgroud)

jsf primefaces font-awesome

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

如何从svn提交创建trac票证?

我正在寻找一种方法来创建(而不是更新)trac票,以响应提交消息,例如"黑客代码不要杀死你的狗(TODO:正确修复这个以避免追逐小猫)".

我希望trac系统对"TODO"关键字做出反应,并创建一个包含提交消息内容的票证,所有者设置为提交者,并且已经引用了开始提交.

在搜索SO时,我发现打开和关闭trac票证只有一个提交,基本上说我如何推出自己的解决方案.如果没有预制的可用,我会这样做.那么 - 有吗?

trac

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

如何使用ui重复子列表:重复?

我正在迁移一段看起来像这样的遗留代码:

<c:forEach items="#{sel}" var="crit" end="12">
  <tr>
    <td class="criteriaName">
      <c:set var="tip" value="#{Factory.makeTooltip(crit.string)}" />

      <c:if test="#{0 != fn:length(tip)}">
        <a:outputPanel layout="block">
          <h:outputText value="#{crit.kriterium}" styleClass="tooltipAvailable"/>
            <rich:tooltip layout="block">
              <h:outputText escape="false" value="#{tip}" />
            </rich:tooltip>
         </a:outputPanel>
       </c:if>

       <c:if test="#{0 == fn:length(tip)}">
         <h:outputText value="#{crit.kriterium}" />
       </c:if>
     </td>
  </tr>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

现在我正在寻找替换<c:if><c:forEach>与他们<ui:fragment><ui:repeat>同行.问题是,我需要迭代sel两次:一次从0到12再从13到结束.

我没有找到一种方法来分割列表迭代,就像endforeach标记的属性一样.我真的想避免在后端拆分列表,因为这是一个纯粹的视图问题,应该在那里处理.

所以问题是:我可以按照指定的方式替换上面的片段吗?有哪些替代方案?

jsf-2

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

如何使用异步servlet修改代理响应?

我正在尝试实现一个异步servlet,它将接收最终用户的请求,将其传递给后端服务器并获取响应.

到目前为止,这听起来像Jetty的标准应用程序ProxyServlet.

现在,扭曲的是我的后端会响应include语句(有点像Server-Side-Includes),我需要解析,查询后端并插入最终用户响应流中的适当位置.

你会如何实现这个?我特别好奇在onResponseContent回调期间解析和触发中间请求,我理解可能包含也可能不包含完整响应(因此可能只包含include语句的部分内容).

为了说明,这是我目前拥有的:

@WebServlet(name = "MyServlet",
        urlPatterns = {"/my/outbounduri/*"},
        initParams = {
                @WebInitParam(name = "proxyTo", value = "/servlet/backend")
        }
)
public class MyHandler extends ProxyServlet {
    @Override
    protected void customizeProxyRequest(HttpServletRequest srequest, 
            HttpServletResponse sresponse ) {
        // add custom headers for the backend
    }

    @Override
    protected void onResponseContent(HttpServletRequest request, 
            HttpServletResponse response, Response proxyResponse, 
            byte[] buffer, int offset, int length, Callback callback) {
        try {
            // instead of passing the content on, we need to catch …
Run Code Online (Sandbox Code Playgroud)

asynchronous jetty ssi servlet-3.0

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

选择更改后触发<rich:select />事件

我正在使用<rich:select/>元素从列表中选择一个元素,并且需要在用户更改所选元素后执行操作.我写了这个:

<rich:select ... >
    <f:selectItems ... />
    <a4j:ajax listener="#{...}" event="change" render="..."/>
</rich:select>
Run Code Online (Sandbox Code Playgroud)

并面临一个问题:change只有当<rich:select>焦点丢失时才会发生事件.change当用户选择它的第一个值(来自空的默认值)时,事件根本不起作用.
如何在选择更改后立即调用操作?

events jsf richfaces onchange ajax4jsf

0
推荐指数
1
解决办法
4148
查看次数