所以我正在尝试对模型伟大的granchildren执行查询.关系如此......
比赛>比赛>比赛>球员
和锦标赛模型:
class Tournament < ActiveRecord::Base
has_many :competitions, :dependent => :destroy
has_many :matches, :through => :competitions
has_many :players, :through => :matches
end
Run Code Online (Sandbox Code Playgroud)
目前我所拥有的用于检索所有伟大的孙子孙记录的是:
@results = @tournament.competitions.collect{|b| b.matches.collect{|c| c.players.with_win_count}}.flatten
Run Code Online (Sandbox Code Playgroud)
这是有效的,但问题是它返回一个数组.我要做的是基于用户输入构建动态查询,并且播放器表本质上是所有匹配的结果池,并且用户可以选择仅过滤他想要看到的内容.我最终得到的是一个相当复杂的(取决于用户输入)查询以及无法在数组上执行的附加where子句.为了让您更好地了解这是如何工作的,这是我的代码......
def results
@tournament = Tournament.find(params[:id])
@results = @tournament.all_great_grandchildren
@results.where(params[:player_condition1]) if params[:player_condition1]
@results.where(params[:player_condition2]) if params[:player_condition2]
@results.where(params[:player_condition3]) if params[:player_condition3]
if params[:match_condition]
#Join to match table so we can query the match fields
@results.join(:match)
@results.where(params[:match_condition])
end
....
@results.order(params[:order]) if params[:order]
end
Run Code Online (Sandbox Code Playgroud)
有没有办法找到没有阵列的任何特定锦标赛的所有伟大的孙子(球员)记录,所以我可以继续调整记录?
我的大多数实体(并非全部)都有两个称为CompanyId和的属性Deleted。如何为所有选择请求自动插入这两个属性,而不是对整个应用程序中的每个查询手动进行设置。
例:
db.MyEntity.Where(me => me.Id == 1).Select(me => me.Description)
Run Code Online (Sandbox Code Playgroud)
CompanyId和Deleted。db.MyEntity.Where(me => me.Id == 1 && Deleted == false && CompanyId == 1).Select(me => me.Description)
这将有助于我对所有具有可用属性的查询设置这些条件。
entity-framework dynamicquery predicatebuilder entity-framework-6
在System.Linq.Dynamic中,有一些方法可以动态地形成Select,Where和其他Linq语句.但SelectMany没有.
Select的方法如下:
public static IQueryable Select(this IQueryable source, string selector, params object[] values)
{
if (source == null) throw new ArgumentNullException("source");
if (selector == null) throw new ArgumentNullException("selector");
LambdaExpression lambda = DynamicExpression.ParseLambda(source.ElementType, null, selector, values);
IQueryable result = source.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "Select",
new Type[] { source.ElementType, lambda.Body.Type },
source.Expression, Expression.Quote(lambda)));
return result;
}
Run Code Online (Sandbox Code Playgroud)
我试着修改上面的代码,经过几个小时的工作,我找不到出路.
欢迎任何建议.
英
我在 service.xml 中定义了服务实体,如下所示:
<entity name="LoginData" local-service="true" remote-service="false">
<!-- PK fields -->
<column name="userId" type="long" primary="true" />
<column name="loginDate" type="Date" primary="true" />
</entity>
我正在尝试使用 LocalServiceImpl 类中定义的dynamicQuery 来获取行。
DynamicQuery dynamicQuery=DynamicQueryFactoryUtil.forClass(LoginData.class);
dynamicQuery.add(RestrictionsFactoryUtil.eq("userId", userId));
dynamicQuery.add(RestrictionsFactoryUtil.between("loginDate", startDate, endDate));
return (List<LoginData>)LoginDataLocalServiceUtil.dynamicQuery(dynamicQuery);
但上面代码的最后一行抛出异常
Caused by: org.hibernate.QueryException: could not resolve property: userId of: com.example.model.impl.LoginDataImpl
有人能告诉我这里出了什么问题吗?或者我错过了什么?
是否有像Spring Data MongoDB存储库的JPA规范?
如果没有,我如何使用存储库进行动态查询?
经典场景可以是具有用户将填充的可选字段的搜索表单.
spring dynamic-queries dynamicquery spring-data spring-data-mongodb
我正在开发一个需要搜索功能的应用程序,我想编写根据参数动态创建的 HQL 查询。目前我有 4 个参数,而搜索所有参数都是必需的,或者根据用户想要搜索的方式需要 1 或 2 或 3 个参数。
public List<Plot> fetchSearchedPlots(int plotType, String plotSize, String min, String max)
{
Session session = sessionFactory.getCurrentSession();
List<Plot> searchedLists = new ArrayList<Plot>();
String query = "FROM Plot where type = ? and size = ? and price >= ? and price <= ?";
searchedLists = (List<Plot>)session.createQuery( query )
.setInteger( 0, plotType )
.setString( 1, plotSize )
.setString( 2, min )
.setString( 3, max ).list();
return searchedLists;
}
Run Code Online (Sandbox Code Playgroud)
这是我对所有 4 个参数的一般查询,现在我必须编写一个使用多个可选参数的搜索查询,如何使用可选参数进行此查询?请将我的查询转换为动态可选参数查询?谢谢
我看到这个问题在Google或Stack上非常奇怪。让我解释。
我的界面方法的注释中有结果图。仅在这种特殊情况下,我才需要动态查询,这就是我决定在xml文件中为接口编写整个映射器的原因。下面,我粘贴整个文件。选择查询应该可以,但是我遇到了一些困难<resultMap>。
在不同的Web站点上,我一直在寻找关于此结果图的一对一,一对多,多对一关联和构造的良好解释。
我看到有某种可能性将其分成子查询,子结果映射。但是我已经使用myBatis注释完成了此操作,并且我想使用它。您能指导我,应该如何构造resultMap?我看不到需要构造函数,区分<collection>符,但它仍在大喊……(这就是为什么我加了标记)-IntelliJ强调了整个<resultMap>说法:"The content of element type "resultMap" must match "(constructor?,id*,result*,association*,collection*,discriminator?)"
我知道这似乎很明显,但是我完全不知道如何正确地做。请帮我。
xml映射器文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pl.net.manager.dao.UsageCounterDAO">
<select id="getUsageCounterList" resultType="pl.net.manager.domain.UsageCounter"
resultMap="getUsageCounterListMap">
SELECT * FROM usage_counter WHERE
<if test="apiConsumerIdsList != null">
api_consumer IN
<foreach item="item" index="index" collection="apiConsumerIdsList"
open="(" separator="," close=")">
#{item}
</foreach>
AND
</if>
<if test="serviceConsumerIdsList != null">
service IN
<foreach item="item" index="index" collection="serviceConsumerIdsList"
open="(" separator="," close=")">
#{item}
</foreach>
AND
</if>
<if test="dateFrom != …Run Code Online (Sandbox Code Playgroud) 我在oracle 11g中写了一个游标,如下所示:
DECLARE CURSOR QnA_cursor IS
SELECT activity_id, question, answer
FROM TABLE1
WHERE question != 'surveyText'
ORDER BY activity_id, question;
cur_count INT := 1;
que NVARCHAR2(10);
ans NVARCHAR2(10);
sqlCommand NVARCHAR2(500);
RowCountVar INT;
BEGIN
FOR QueAns
IN QnA_cursor
LOOP
IF cur_count = 4 THEN cur_count := 1; END IF; /* We have only 3 questions for each activity_id */
que := 'question' || cur_count; /* question1, question2, question3 */
ans := 'answer' || cur_count; /* answer1, answer2, answer3 */
sqlCommand := …Run Code Online (Sandbox Code Playgroud) 在我的模型中,海龟的数量是动态的,基于用户使用滑块定义的值。滑块可以取 2 到 10 之间的值。每只海龟都有自己的一组坐标和特征,因此我使用以下代码来创建它们。
create-parties 1
[set color red set label-color red set label who + 1 set size 3 setxy party1-left-right party1-lib-con ]
create-parties 1
[set color green set label-color red set label who + 1 set size 3 setxy party2-left-right party2-lib-con ]
if Num-of-parties >= 3
[ create-parties 1
[set color blue set label-color red set label who + 1 set size 3 setxy party3-left-right party3-lib-con ] ]
Run Code Online (Sandbox Code Playgroud)
我重复上述操作直到 Num-of-partys =10。
在其中一个模块中,我创建了一个条件,如果乌龟的某个值达到 0,它就会死亡。
在模型的后面部分,我使用 set-current-plot 使用以下代码创建图表:
set-current-plot …Run Code Online (Sandbox Code Playgroud) 我在SQL Server上有以下查询,其中一些值存储在先前计算的变量中:
SET @Command = N'INSERT INTO Products (Id
,Region
,Name
,Category
,CreatedBy
,CreatedOn
,) SELECT ' + @Id + ',
Region,
''' + @ProductName + ''',
Category,
CreatedBy,
CreatedOn FROM ' + @ProductTable + '
WITH (NOLOCK) WHERE Id IS NOT NULL';
EXEC(@Command)
Run Code Online (Sandbox Code Playgroud)
它运行正常,除非@ProductName的值包含引号(例如Jim的Product),在这种情况下,我将收到以下错误:字符串后的引号未封闭
有没有办法在这样的动态查询中处理变量中的单引号,其中插入的所选值之一(在这种情况下为@ProductName)直接是要插入的值,而不是源表上的实际列名需要检索其值以进行插入?
dynamicquery ×10
java ×2
sql ×2
arrays ×1
associations ×1
charts ×1
cursor ×1
grandchild ×1
hibernate ×1
hql ×1
join ×1
liferay ×1
liferay-6 ×1
linq ×1
mybatis ×1
netlogo ×1
oracle ×1
plsql ×1
spring ×1
spring-data ×1
sql-server ×1
xmlmapper ×1