我正在努力解决一个似乎太容易的问题:
安装程序是两个在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获取连接的实体? - 所以,投票结束?
我知道我可以在某处复制文件,删除(svn)控制的东西并将文件移回.但这似乎是一个在IDE中自动执行的简单任务,所以...我错过了什么?我可以只是"取消标记"一个目录,以便它从VCS中删除但保留在磁盘上以及如何?
我想这很容易,但我无法弄清楚.
如果我有实体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字段,它是单向关系?
我有一个简单的问题:我使用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) 我正在玩弄 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) 我有一个像这样的地址实体:
@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如果它是空的,则设置地址.但这听起来像是一个完全黑客,因为它在所有情况下禁用所有验证.我怎么能做得更好?
我正在使用基于的序列化模型@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)
如果我序列化单个实体,这可以正常工作.但是,对于某些用例,我想使用与单个实体相同的视图序列化我的实体列表.在这种情况下,aClass是ArrayList,所以通常的逻辑没有多大帮助.
所以我正在寻找一种方法告诉杰克逊使用哪种观点.理想情况下,我写道:
@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) 我想使用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) 我正在寻找一种方法来创建(而不是更新)trac票,以响应提交消息,例如"黑客代码不要杀死你的狗(TODO:正确修复这个以避免追逐小猫)".
我希望trac系统对"TODO"关键字做出反应,并创建一个包含提交消息内容的票证,所有者设置为提交者,并且已经引用了开始提交.
在搜索SO时,我发现打开和关闭trac票证只有一个提交,基本上说我如何推出自己的解决方案.如果没有预制的可用,我会这样做.那么 - 有吗?
我正在迁移一段看起来像这样的遗留代码:
<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标记的属性一样.我真的想避免在后端拆分列表,因为这是一个纯粹的视图问题,应该在那里处理.
所以问题是:我可以按照指定的方式替换上面的片段吗?有哪些替代方案?
我正在尝试实现一个异步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) 我正在使用<rich:select/>元素从列表中选择一个元素,并且需要在用户更改所选元素后执行操作.我写了这个:
<rich:select ... >
<f:selectItems ... />
<a4j:ajax listener="#{...}" event="change" render="..."/>
</rich:select>
Run Code Online (Sandbox Code Playgroud)
并面临一个问题:change只有当<rich:select>焦点丢失时才会发生事件.change当用户选择它的第一个值(来自空的默认值)时,事件根本不起作用.
如何在选择更改后立即调用操作?
java ×4
jsf ×2
jsf-2 ×2
ajax4jsf ×1
asynchronous ×1
criteria-api ×1
eclipselink ×1
events ×1
font-awesome ×1
hibernate ×1
jackson ×1
java-8 ×1
jetty ×1
join ×1
jpa ×1
nio ×1
omnifaces ×1
onchange ×1
primefaces ×1
resteasy ×1
richfaces ×1
servlet-3.0 ×1
ssi ×1
trac ×1
wildfly ×1