- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始探索 PlayOrm 并尝试运行网上可用的基本代码来插入和读取数据。当我插入数据时,一切似乎都工作正常,但是在读取相同的数据时,它返回了错误的行数。例如。如果我插入 3 条记录,有时会得到 0 条记录,有时会返回所有记录。
按照我正在使用的代码:
用于插入/读取数据的类:
@NoSqlEntity
@NoSqlQueries({
@NoSqlQuery(name="findByLastName", query="PARTITIONS t('lastName',:lastName) select * FROM TABLE as t"),
@NoSqlQuery(name="findByName", query="PARTITIONS e('name',:name) select * FROM TABLE as e")
})
public class User {
@NoSqlId
private String id;
@NoSqlPartitionByThisField
private String name;
@NoSqlIndexed
private int age;
@NoSqlPartitionByThisField
@NoSqlIndexed
private String lastName;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
/*
* Queries:
* @NoSqlQuery(name="findByLastName", query="PARTITIONS t('lastName',:lastName) select * FROM TABLE as t"),
* @NoSqlQuery(name="findByName", query="PARTITIONS e('name',:name) select * FROM TABLE as e")
*/
public static List<User> findByLastName(NoSqlEntityManager mgr, String lastName) {
Query<User> query = mgr.createNamedQuery(User.class, "findByLastName");
System.out.println("Using last name "+lastName);
query.setParameter("lastName", lastName);
return query.getResultList(0, 100);
}
public static List<User> findByName(NoSqlEntityManager mgr, String name) {
Query<User> query = mgr.createNamedQuery(User.class, "findByName");
System.out.println("Using name "+name);
query.setParameter("name", name);
return query.getResultList(0, 100);
}
}
使用此类的代码:
import java.awt.List;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import com.alvazan.orm.api.base.Bootstrap;
import com.alvazan.orm.api.base.DbTypeEnum;
import com.alvazan.orm.api.base.NoSqlEntityManager;
import com.alvazan.orm.api.base.NoSqlEntityManagerFactory;
import com.netflix.astyanax.retry.SleepingRetryPolicy;
public class Example {
private static NoSqlEntityManager mgr;
public static void main(String[] args) {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(Bootstrap.AUTO_CREATE_KEY, "create");
/*
* Bootstrap.createAndAddBestCassandraConfiguration(properties, clusterName, keyspace, seeds);
* NoSqlEntityManagerFactory factory = Bootstrap.create(DbTypeEnum.CASSANDRA, properties,null,null);
*/
NoSqlEntityManagerFactory factory = Bootstrap.create(DbTypeEnum.IN_MEMORY, properties,null,null);
mgr = factory.createEntityManager();
String file_to_use = userData;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
System.out.println("Starting inserts with file "+file_to_use+" at "+sdf.format(Calendar.getInstance().getTime()));
BufferedReader CSVFile = null;
try {
CSVFile = new BufferedReader(new FileReader(file_to_use));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String dataRow = null;
try {
dataRow = CSVFile.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // Read the first line of data.
int i = 0;
while (dataRow != null){
String[] dataArray = dataRow.split(",");
User user = new User();
user.setName(dataArray[0]);
user.setAge(Integer.parseInt(dataArray[1]));
user.setLastName(dataArray[2]);
System.out.println("Inserting Values "+dataArray[0]+" "+dataArray[1]+" "+dataArray[2]);
mgr.flush();
try {
dataRow = CSVFile.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
java.util.List<User> result;
System.out.println("#### By LastName ####");
result = User.findByLastName(mgr, "Freida");
System.out.println("Result Size: "+ result.size());
System.out.println("#### By Time ####");
result = User.findByName(mgr, "John");
System.out.println("Result Size: "+ result.size());
}
}
用户数据内容:
John,17,Freida
Jim,18,Freida
Jam,19,Freida
Johny,20,Freida
Jen,21,Freida
最佳答案
编辑:这是 PlayOrM 中的一个非常具体的错误。最新的已提交修复程序为 https://github.com/deanhiller/playorm/commit/22d50a12667d03fd2c4683abeb59a4822420a4ce
仅当您在同一列上同时使用 @NoSqlPartionedBy 和 @NoSqlIndexed 两次时才会发生这种情况。一种解决方法是在您的 where 子句中放入一些内容(任何内容),并且每次都会使用特定的索引(基于您的 where 子句中的列)。或者只是获取包含修复程序的最新代码。
我不确定您是否应该使用分区。在您的示例中,您以两种方式对表进行分区......名称和姓氏。在一种情况下,具有相同名称的所有行都位于同一分区中。在另一种情况下,具有相同姓氏的所有行都位于同一分区中。您只能查询单个分区。所以想象一下你有名字
dean
mike
joe
这是 3 个不同的分区,您可以查询任何人。您可以查询“给我partition=dean 中lastname=smith 的所有人员”或者您可以查询给我partition=mike 中lastname=smith 的所有人员”
想象一下您也有姓氏
smith
black
obama
这里有 3 个分区,您可以查询“给我分区=smith 中所有 name=dean 的人”或“给我分区=black 中所有 name=dean 的人”
如果您想让事情变得更简单,请删除所有@NoSqlPartitionByField,这样您就根本不需要分区。
基本上,通过分区,您可以查询单个分区。每个分区都有它自己的索引。这就是为什么它可以在您拥有 X 百万行的无限分区时进行扩展。但分区中不能有无限行。
我猜测很多,因为你的示例只插入一行,而你声称要插入 3 行,我希望你的代码在这两种情况下都返回 1 行。您的查询要求返回lastName =“Frieda”的分区中的所有行,然后返回name =“John”的分区中的所有行,并且由于您使用两者存储了一个对象,所以这就是该行最终应位于的分区。 ..这已经在生产中适用于我们,并且我们没有遇到任何问题。
如果您有更多信息,例如执行 3 次插入而不仅仅是这一次的代码,请告诉我。
院长
关于cassandra - 使用 PlayOrm 读取查询确实会返回适当的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15876122/
我有三张 table 。表 A 有选项名称(即颜色、尺寸)。表 B 有选项值名称(即蓝色、红色、黑色等)。表C通过将选项名称id和选项名称值id放在一起来建立关系。 我的查询需要显示值和选项的名称,而
在mysql中,如何计算一行中的非空单元格?我只想计算某些列之间的单元格,比如第 3-10 列之间的单元格。不是所有的列...同样,仅在该行中。 最佳答案 如果你想这样做,只能在 sql 中使用名称而
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在为版本7.6进行Elasticsearch查询 我的查询是这样的: { "query": { "bool": { "should": [ {
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
是否可以编写一个查询来检查任一子查询(而不是一个子查询)是否正确? SELECT * FROM employees e WHERE NOT EXISTS (
我找到了很多关于我的问题的答案,但问题没有解决 我有表格,有数据,例如: Data 1 Data 2 Data 3
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
我从 EditText 中获取了 String 值。以及提交查询的按钮。 String sql=editQuery.getText().toString();// SELECT * FROM empl
我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。 所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000
这是我第一次使用 Stack Overflow,所以我希望我以正确的方式提出这个问题。 我有 2 个 SQL 查询,我正在尝试比较和识别缺失值,尽管我无法将 NULL 字段添加到第二个查询中以识别缺失
什么是动态 SQL 查询?何时需要使用动态 SQL 查询?我使用的是 SQL Server 2005。 最佳答案 这里有几篇文章: Introduction to Dynamic SQL Dynami
include "mysql.php"; $query= "SELECT ID,name,displayname,established,summary,searchlink,im
我有一个查询要“转换”为 mysql。这是查询: select top 5 * from (select id, firstName, lastName, sum(fileSize) as To
通过我的研究,我发现至少从 EF 4.1 开始,EF 查询上的 .ToString() 方法将返回要运行的 SQL。事实上,这对我来说非常有用,使用 Entity Framework 5 和 6。 但
我在构造查询来执行以下操作时遇到问题: 按activity_type_id过滤联系人,仅显示最近事件具有所需activity_type_id或为NULL(无事件)的联系人 表格结构如下: 一个联系人可
如何让我输入数据库的信息在输入数据 5 分钟后自行更新? 假设我有一张 table : +--+--+-----+ |id|ip|count| +--+--+-----+ |
我正在尝试搜索正好是 4 位数字的 ID,我知道我需要使用 LENGTH() 字符串函数,但找不到如何使用它的示例。我正在尝试以下(和其他变体)但它们不起作用。 SELECT max(car_id)
我有一个在 mysql 上运行良好的 sql 查询(查询 + 连接): select sum(pa.price) from user u , purchase pu , pack pa where (
我是一名优秀的程序员,十分优秀!