playorm - 使用 Cursor 在 OneToMany 上运行基本 PlayORM 示例时遇到问题

标签 playorm

我最近一直在玩PlayORM,发现它非常有趣且有用。因此,首先,非常感谢您提供此信息。

但是,在运行具有潜在 Cursor 支持的 OneToMany 关系的非常基本的示例时,我确实遇到了一些麻烦。简而言之,我有三个简单的类:电子邮件、用户和测试,如下所示。

@NoSqlEntity
public class Email {
    @NoSqlId
    private String id;

    //getters and setters
    ... ...
}

@NoSqlEntity
@NoSqlQueries({ ... })
public class User {        
    @NoSqlId
    private String id;
    @NoSqlIndexed
    private String name;
    @NoSqlIndexed
    private int age;

    @NoSqlOneToMany
    private List<Email> emails = new ArrayList<Email>();
    //@NoSqlOneToMany
    //private CursorToMany<Email> emailCursor = new CursorToManyImpl<Email>();

    //getters and setters
    ... ...

    public void addEmail(Email e) {
        emails.add(e);
        //emailCursor.addElement(e);
    }
}

public class Test {
    private static NoSqlEntityManager mgr;
    public static void main(String[] args) {
        Map properties = new HashMap();
        properties.put(Bootstrap.AUTO_CREATE_KEY, "create");
        String clusterName = ...
        String seeds = ...
        String keyspace = ...
        Bootstrap.createAndAddBestCassandraConfiguration(properties, clusterName, keyspace, seeds);
        NoSqlEntityManagerFactory factory = Bootstrap.create(DbTypeEnum.CASSANDRA, properties, null, null);
        mgr = factory.createEntityManager();

        Email e1 = new Email();
        Email e2 = new Email();
        mgr.put(e1);
        mgr.put(e2);

        User u1 = new User();
        u1.setName...
        u1.setAge...
        u1.addEmail(e1);
        u1.addEmail(e2);
        mgr.put(u1);
        mgr.flush();
        ... ...
}

好的,场景简单明了,我的 Cassandra 1.2 环境设置得很好。现在,问题是:

  1. 当我使用List<Email> emails时,e1 和 e2 的外键作为列存储在 u1 的行中 - 这正是预期的行为。但是,当我找到 u1 对象时,u1.getEmails()始终是一个空列表,其中没有 e1 和 e2,尽管它们实际上存在于数据库中。为什么?

  2. 当我使用CursorToMany<Email> emailCursor时相反,e1 和 e2 的外键永远不会进入 u1 的行 - 这是不正常的,不是吗?当然,在这种情况下,当我找到u1对象时,Cursor没有next()。

顺便说一句,我正在使用 PlayORM-1.7-snapshot,非常感谢任何提示和建议!

最佳答案

感谢您对 PlayORM 的美言。
几件事:
1. 你如何获得你的 u1 对象?我的意思是你正在使用哪种方法?
2. 使用Playorm命令行工具,查询得到什么结果
“从用户中选择*”

从 id =“u1”的用户中选择 *?

3.TestOneToMany.java中有一个测试用例“testIndependentAddsAreCumulativeForCursor”。在您的环境中运行良好吗?如果运行正常,请分享您的完整代码。

关于playorm - 使用 Cursor 在 OneToMany 上运行基本 PlayORM 示例时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18533266/

相关文章:

java - 使用 Eclipse 进行 playOrm

java - Playorm java.lang.Integer 无法转换为 java.math.BigInteger

grails - Grails和PlayORM

java - 为什么 playorm 没有构建?

gradle - 如何构建 playorm JAR

java - 运行大量数据时与 platfOrm 的连接重置

playorm - 关闭 playOrm 中的日志记录

cassandra - 使用 PlayOrm 读取查询确实会返回适当的结果