JPA Repository.findByAll () devuelve un valor nulo, pero todo existe en dB

TomaszC283:

TENGO simples páginas JSP demostrada que deberían mostrar 5 productos con identificación , descripción , cantidad . ¿Me pueden ayudar a encontrar un problema?

Quiero Conecte esta página con la base de datos , manualy productos listado será profesional y no problemático cuando se desea añadir más productos.

Cuando i solicitud de página / almacenamiento tengo una excepción :

[ERROR] Servlet.service() for servlet [dispatcherServlet] in context with path [] 
threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
    at (...)StoragePageController.openAllProductsPage(StoragePageController.java:27)

Storage.JSP:

<table width="1000" border="0" cellpadding="6" cellspacing="2">
    <c:forEach var="u" items="${productList }">
        <c:set var="licznik" value="${licznik+1}" />
        <tr onmouseover="changeTrBg(this)" onmouseout="defaultTrBg(this)">
            <td align="right"><c:out value="${licznik }" /></td>
            <td align="right"><c:out value="${u.id }" /></td>
            <td align="left"><c:out value="${u.description }" /></td>
            <td align="left"><c:out value="${u.amount }" /></td>
        </tr>
    </c:forEach>
</table>

StoragePageController:

@Controller
public class StoragePageController {


    private StorageService storageService;

    @GET
    @RequestMapping(value = "/storage")
    public String openAllProductsPage(Model model) {

        List<Product> productList = storageService.findAll();
        model.addAttribute("productList", productList);
        return "storage";
    }
}

StorageService:

public interface StorageService {

    public Product findById(int id);
    List<Product> findAll();
    void updateProduct(int id, int amount);

}

StorageServiceImpl:

@Service("storageService")
@Transactional
public class StorageServiceImpl implements StorageService {

    @Autowired
    private ProductRepository productRepository;

    @Override
    public Product findById(int id) {
        Product product = productRepository.findById(id);
        return product;
    }

    @Override
    public List<Product> findAll() {
        List<Product> productList = productRepository.findAll();
        return productList;
    }

    @Override
    public void updateProduct(int id, int amount) {
        productRepository.updateProductAmount(amount, id);
    }

}

ProductRepository:

@Repository("productRepository")
public interface ProductRepository extends JpaRepository<Product, Integer>{

    @Modifying
    @Query(value = "UPDATE Products p SET p.amount = :amount WHERE p.product_id= :id", nativeQuery = true)
    void updateProductAmount(@Param("amount") int amount, @Param("id") int id);

    public Product findById(int id);
}

y ** Producto: **

@Entity
@Table(name = "products")
public class Product {

    @Id
    @Column(name = "product_id")
    private int id;

    @Column(name = "description")
    @NotNull
    private String description;

    @Column(name = "amount")
    @NotNull
    private int amount;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public int getAmount() {
        return amount;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }
}

SQL si es necesario:

DROP TABLE IF EXISTS `products`;
CREATE TABLE `products` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(255) NOT NULL,
  `amount` INT(64) NOT NULL,
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
Leandro Rosa :

Parece que se echa en falta @Autowiredla anotación en el StoreController

@Controller
public class StoragePageController {

    @Autowired
    private StorageService storageService;

    @GET
    @RequestMapping(value = "/storage")
    public String openAllProductsPage(Model model) {

        List<Product> productList = storageService.findAll();
        model.addAttribute("productList", productList);
        return "storage";
    }
}

O

La forma más recomendada para la inyección de dependencia es crear un constructor con todas las dependencias.

@Controller
public class StoragePageController {


    private final StorageService storageService;

    public StoragePageController(StorageService storageService) {
       this.storageService = storageService;
    }

    @GET
    @RequestMapping(value = "/storage")
    public String openAllProductsPage(Model model) {

        List<Product> productList = storageService.findAll();
        model.addAttribute("productList", productList);
        return "storage";
    }
}

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=389675&siteId=1
Recomendado
Clasificación