调用存储的proc时返回相同的记录

时间:2020-09-14 12:15:05

标签: java spring-boot hibernate

我有一个mysql db(尽管以后也需要针对MSSQL运行),它带有一个存储过程aaaacme_consumables,它带有一个序列号参数。我可以在mysql中按如下方式调用它:

call aa_acme_consumables("12345");

我将返回以下记录:

Serial_No | partID | Qty | Description
12345     | a123   | 10  | Widget One
12345     | b456   | 3   | Widget Two

全面披露:在我的多次尝试中,我可能会混淆不同解决方案的某些部分。这是我到目前为止所拥有的。

我的 @Entity类如下:

@Entity
@Data
public class Consumable implements Serializable {

    @Id
    @Column(name = "Serial_No")
    private String serialNo;
    @Column(name = "partID")
    private String partID;
    @Column(name = "Qty")
    private int quantity;
    @Column(name = "Description")
    private String desc;    
}

我的存储库类如下所示”

@Repository
public interface ConsumableRepo extends JpaRepository<Consumable, Integer>, ConsumableRepoCust { }

我的自定义存储库类如下:

public interface ConsumableRepoCust {
    public List<Consumable> getAllConsumables(String serialNum); 
}

我的存储库实施如下:

public class ConsumableRepoImpl {

    @PersistenceContext
    EntityManager em;
    
    public List<Consumable> getAllConsumables(String serialNum) throws SQLException {
        
        StoredProcedureQuery query = em.createStoredProcedureQuery("xx_bds_Consumable", Consumable.class);
        query.registerStoredProcedureParameter("serialNum", String.class, ParameterMode.IN);
        query.setParameter("serialNum", serialNum);
        
        query.execute();
        
        List<Consumable> consumableList = query.getResultList();
        
        for (Consumable c : consumableList ) {
            System.out.println("Description : " + c.getDesc() );
        }
                
        return consumableList ;
    }
}

我希望返回以下内容:

========== ABOUT TO RUN STORED PROC ==========
Hibernate: {call aa_acme_consumables(?)}
Description : Widget One
Description : Widget Two

所以我的问题: **为什么我要退货? **

========== ABOUT TO RUN STORED PROC ==========
Hibernate: {call aa_acme_consumables(?)}
Description : Widget One
Description : Widget One

我希望从第二条记录(窗口小部件2)中获取描述,就像从mysql调用存储的proc一样,但是我两次获得窗口小部件One。这一直困扰着我。

0 个答案:

没有答案