如何QueryDsl在查询JPA中使用此功能
SUBSTRING_INDEX(str,delim,count)
Run Code Online (Sandbox Code Playgroud)
str在count出现分隔符之前从字符串返回子字符串delim.
更新1: 尝试@MaciejDobrowolski之后的解决方案:
QAcheteur ach = new QAcheteur("ach");
new JPAQuery(entityManager).from(ach)
.list( Expressions.stringTemplate("SUBSTRING_INDEX({0},',',1)", ach.ancestors) );
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode
\-[METHOD_CALL] MethodNode: '('
+-[METHOD_NAME] IdentNode: 'SUBSTRING_INDEX' {originalText=SUBSTRING_INDEX}
\-[EXPR_LIST] SqlNode: 'exprList'
+-[DOT] DotNode: 'acheteur1_.ancestors' {propertyName=ancestors,dereferenceType=PRIMITIVE,getPropertyPath=ancestors,path=ach.ancestors,tableAlias=acheteur1_,className=persistence.Acheteur,classAlias=ach}
| +-[ALIAS_REF] IdentNode: 'acheteur1_.ID_ACHETEUR' {alias=ach, className=persistence.Acheteur, tableAlias=acheteur1_}
| \-[IDENT] IdentNode: 'ancestors' {originalText=ancestors}
+-[QUOTED_STRING] LiteralNode: '',''
\-[NUM_INT] LiteralNode: '3'
Run Code Online (Sandbox Code Playgroud)
更新2 :(解决方案)
关注@DraganBozanovic的回答我创建我的自定义方言来获取No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode因为SUBSTRING_INDEX未知JPA因此我们使用自己的方言使其工作.
package dialect;
import …Run Code Online (Sandbox Code Playgroud) 我正在开发一个企业应用程序与java和hibernate与spring mvc在服务器端,并使用jquery在客户端(不是SPA).
现在在搜索页面中我使用ajax并获得唯一的json响应,但我不想在每个搜索或分页请求中写下面这样的内容.
function(ajaxData) {
....
$('#search').html('' +
'<div class="search-container">' +
'<div class="search-item">' +
'<div class="title-item">'+ajaxData.title+'</div>' +
...
...
'</div>' +
'</div>'
)
....
}
Run Code Online (Sandbox Code Playgroud)
我认为使用此页面中的jsx一个react或vue 组件很容易刷新结果.
我还想重用一些html块,我认为用react或者很容易vue
我曾经建立了一个小型的SPA项目,它是关于npm和webpack捆绑的,但我真的不想使用它们,因为我有一个多页面应用程序,它非常适合我的项目.
我认为同样的事情facebook是做的,他们使用反应,但facebook不是SPA.
我怎样才能实现这种混合方式?
在我的Facelets页面中,我有这个:
<p:growl id="msg1" life="1500"/>
Run Code Online (Sandbox Code Playgroud)
和另一个
<p:messages id="msg2"/>
Run Code Online (Sandbox Code Playgroud)
我只需要显示以下消息<p:messages>.
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("veillez saisir les champs obligatoires (*)", null));
Run Code Online (Sandbox Code Playgroud)
但它也出现了<p:growl>.
如何指定消息的显示位置?
我在URL中有一个这样的登录表单http://localhost:8080/myproject/login:
<form:form method="POST" modelAttribute="auth" action="welcome" id="formlogin">
[...]
</form:form>
Run Code Online (Sandbox Code Playgroud)
和这样的控制器:
@RequestMapping(value = "/welcome")
public String welcome([...]) {
[...]
if(logins.size() != 1) {
return "login";
}
[...]
return "welcome";
}
Run Code Online (Sandbox Code Playgroud)
问题是,当登录名不正确时,我得到了此URL,http://localhost:8080/myproject/welcome但我想获取http://localhost:8080/myproject/login并获取welcome以防万一登录名正确。
第一次更新
就我而言,最好的使用方式
return "redirect:/login"
Run Code Online (Sandbox Code Playgroud)
但在我必须添加这样的属性之前
model.put("errorlogin", true);
Run Code Online (Sandbox Code Playgroud)
处理这个
<c:if test="${ errorlogin == true }">
<label class="loginerror">Login Error</label>
</c:if>
Run Code Online (Sandbox Code Playgroud)
但是错误消息没有显示,而是我得到了这个URL
http://localhost:8080/pagesjaunes/login?errorlogin=true
Run Code Online (Sandbox Code Playgroud)
我设置一个属性,然后得到一个参数。
第二次更新
我解决了这个问题:
<c:if test="${ param.errorlogin == true }">
<label class="loginerror">Login Error</label>
</c:if>
Run Code Online (Sandbox Code Playgroud) 我使用hibernate spring-data-jpa和querydsl进行分页,并且我只使用@BatchSize(size=10)一次数据库往返.
@Entity
@Table(name = "appel_offre", catalog = "ao")
public class AppelOffre implements java.io.Serializable {
....
@OneToMany(fetch = FetchType.LAZY, mappedBy = "appelOffre")
@BatchSize(size=10)
public Set<AoActivite> getAoActivites() {
return this.aoActivites;
}
Run Code Online (Sandbox Code Playgroud)
并且:
@Entity
@Table(name = "ao_activite", catalog = "ao")
public class AoActivite implements java.io.Serializable {
.....
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_ACTIVITE", nullable = false)
@BatchSize(size=10)
public Activite getActivite() {
return this.activite;
}
Run Code Online (Sandbox Code Playgroud)
我的查询
JPAQuery query = new JPAQuery(entityManager).from(ao)
.leftJoin( ao.acheteur, ach ).fetch()
.leftJoin( ao.aoActivites , ao_ac )
.leftJoin( …Run Code Online (Sandbox Code Playgroud) 我有这个查询字符串 www.example.com/yy?q=how+can+i+get+this&o=1&source=home
如何q使用javascript或jquery 解析数组中的参数值?
我想要像这样的数组
['how', 'can', 'i', 'get', 'this']
Run Code Online (Sandbox Code Playgroud) 我有这个工作代码吼叫,我认为他有点太长,多余的我可以自定义吗?
$( "#unique" ).click(function() {
if ( $( this ).is(':checked') ) {
$( ".lotud" ).show();
$( "#add_lot" ).hide();
$( "#lots_rows_contnr" ).hide();
$(".lotud input").prop({disabled: false})
$("#lots_rows_contnr input").prop({disabled: true})
}
else {
$( ".lotud" ).hide();
$( "#add_lot" ).show();
$( "#lots_rows_contnr" ).show();
$(".lotud input").prop({disabled: true})
$("#lots_rows_contnr input").prop({disabled: false})
}
});
Run Code Online (Sandbox Code Playgroud) 我有一张桌子,我为他的祖先的每一个记录保存
+----+------------+
| id | ancestors |
+----+------------+
| 1 | ,1, |
| 2 | ,2, |
| 3 | ,3,1, |
| 4 | ,4,2, |
| 5 | ,5,3,1, |
| 6 | ,6,4,2, |
| 7 | ,7,5,3,1, |
+----+------------+
Run Code Online (Sandbox Code Playgroud)
如何按照id这种方式分组,而group by ','id','不是group by id得到这样的结果:
+----+------------+
| id | count |
+----+------------+
| 1 | 4 |
| 2 | 3 |
| 3 | 3 |
| 4 | …Run Code Online (Sandbox Code Playgroud) 如何编写此查询 queryDsl
SELECT a.id,
(SELECT count(*) FROM ancestors_table t where t.ancestors LIKE CONCAT('%,',a.id,',%') )
FROM ancestors_table a;
Run Code Online (Sandbox Code Playgroud)
我与这LIKE CONCAT('%,',a.id,',%')部分斗争。
解决方案
where(t.ancestors.like(
Expressions.stringTemplate("'%,'")
.concat(Expressions.stringTemplate("{0}" , a.id ))
.concat(Expressions.stringTemplate("',%'"))
))
Run Code Online (Sandbox Code Playgroud) java ×4
javascript ×3
jquery ×3
hibernate ×2
jpa ×2
querydsl ×2
spring ×2
spring-mvc ×2
eclipse ×1
jsf-2 ×1
messages ×1
mysql ×1
performance ×1
primefaces ×1
reactjs ×1
sql ×1
vue.js ×1