解决方案 »

  1.   

    debug一下:opSpecListId的顺序是否每次都是乱的?
      

  2.   

    不是,传的值顺序一直是对的,debug完在manager.flush();执行之前,product中的specs顺序是对的 执行之后 specs=null 这个好像是因为懒加载原因吧,再到后面 summarize(product) 顺序就变了 summarize方法是jaxb序列化反序列化操作不影响。感觉问题就在懒加载 添加多方数组 再到数据库是不是无序的现在是传值1 、2   有时候是 1、2 对的 有时候就会2、1  因为是做测试的 测试rest接口,校验所以结果有时对有时不对了,哎
      

  3.   


    不是,传的值顺序一直是对的,debug完在manager.flush();执行之前,product中的specs顺序是对的 执行之后 specs=null 这个好像是因为懒加载原因吧,再到后面 summarize(product) 顺序就变了 summarize方法是jaxb序列化反序列化操作不影响。感觉问题就在懒加载 添加多方数组 再到数据库是不是无序的现在是传值1 、2   有时候是 1、2 对的 有时候就会2、1  因为是做测试的 测试rest接口,校验所以结果有时对有时不对了,哎
      

  4.   

    简单描述下:
    product 和 specs是多对多,现在方法就是上面贴出来的,就是往product.getSpecs()出来的集合添加 两条spec对象、传值就是spec的id然后从数据库中查出来的,多对多默认多方是懒加载,传的两个id再到最后保存到数据库中,id的顺序就会变化,方法中是list集合 add的时候也是按照顺序添加到spec list集合中的,但是最后保存product对象的时候 product中的specs的list中的顺便到数据库就会变化了, 问题就是这个问题目前debug是,调用manager.flush()方法前product中的specs顺序是对的,执行manager.flush()后product中的specs=null 这个应该也是对的,可能是懒加载的原因吧,最后方法结束后,数据库中的specs顺便变了,那就说明保存的product对象中的specs就已经变化了。  问题是不是就出在flush 上  之前是不是都在在内存中的, 但是想不通 不知道原因啊不知道还能明白啥意思,打字快可能有错别字,应该都能看的懂哈
      

  5.   

    简单描述下:
    product 和 specs是多对多,现在方法就是上面贴出来的,就是往product.getSpecs()出来的集合添加 两条spec对象、传值就是spec的id然后从数据库中查出来的,多对多默认多方是懒加载,传的两个id再到最后保存到数据库中,id的顺序就会变化,方法中是list集合 add的时候也是按照顺序添加到spec list集合中的,但是最后保存product对象的时候 product中的specs的list中的顺便到数据库就会变化了, 问题就是这个问题目前debug是,调用manager.flush()方法前product中的specs顺序是对的,执行manager.flush()后product中的specs=null 这个应该也是对的,可能是懒加载的原因吧,最后方法结束后,数据库中的specs顺便变了,那就说明保存的product对象中的specs就已经变化了。  问题是不是就出在flush 上  之前是不是都在在内存中的, 但是想不通 不知道原因啊不知道还能明白啥意思,打字快可能有错别字,应该都能看的懂哈
      

  6.   


     public ProductSummary postConsultProduct( List<String> opSpecListId) {
            Product product = manager.find(Product.class, new ProductPK(productId));
            List<Spec> specs = product.getSpecs();
            for (int i = 0; i < opSpecListId.size(); i++) {
                String id = opSpecListId.get(i);
                Spec spec = specApi.spec(id);
                specs.add(spec);
            }
            product.setSpecs(specs);
            product.setState(SpecState.EDITING);
            logApi.saved(product);
            manager.flush();
            return summarize(product);
         }
      

  7.   


    简单的说就是, 传参["spec_001","spec_002"] 调用上面方法后,返回的对象  product.getSpecs 的数组顺序不是传的顺序
      

  8.   


    调式都有一天了,知道问题在哪 不知道问题原因就是保存一个对象中的list数组  到数据库中数组顺序变化 就这个问题
      

  9.   

    你的实体类的配置或者注解贴出来,看看你jpa的配置
      

  10.   


    太多了:Product类: 主要就是这个
    @JoinTable(joinColumns = {@JoinColumn(name = "PRODUCT_ID", referencedColumnName = "ID"),
            @JoinColumn(name = "PRODUCT_SNAPSHOTNO", referencedColumnName = "SNAPSHOTNO")
            }, inverseJoinColumns = {
            @JoinColumn(name = "SPEC_ID", referencedColumnName = "ID"),
            @JoinColumn(name = "SPEC_SNAPSHOTNO", referencedColumnName = "SNAPSHOTNO")})
        @ManyToMany
        private List<Spec> specs;persistece.xml
    <jta-data-source>jdbc/specdb-example-xml</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>