私は今、hibernate、spring mvcを学んでおり、オブジェクトをデータベースに入れることができるアプリケーションを作成したいと思っています。しかし、私はオブジェクトを挿入するときに問題があります。 挿入後もデータベースが空であり、すべてのフィールドが空であり、問題がどこに正確に表示されるのかわかりません。Hibernate、Spring - データベースにテーブルを埋め込まない
Productクラス
@Entity
public class Product {
@Id
private int id;
@Column
private String productId;
@Column
private String name;
@Column
private BigDecimal unitPrice;
@Column
private String description;
@Column
private String manufacturer;
@Column
private String category;
@Column
private long unitsInStock;
@Column
private long unitsInOrder;
@Column
private boolean discontinued;
@Column
private String condition;
public Product(String productId, String name, BigDecimal unitPrice){
this.productId = productId;
this.name = name;
this.unitPrice = unitPrice;
}
persistence.xmlの
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="myDatabase" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="tutorial" />
<property name="javax.persistence.jdbc.password" value="password" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mojabaza" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
InMemoryProductRepository.class
@Transactional
@Repository
public class InMemoryProductRepository implements ProductRepository {
@PersistenceContext
EntityManager entityManager;
private List<Product> listOfProducts = new ArrayList<Product>();
public InMemoryProductRepository() {
Product iphone = new Product("P1234", "iPhone 5s", new BigDecimal(500));
iphone.setDescription("Apple iPhone 5s, smartfon z 4-calowym wyswietlaczem o rozdielczosci 640x1136 oraz "
+ "8-megapikselowym aparatem");
iphone.setCategory("Smart Phone");
iphone.setManufacturer("Apple");
iphone.setUnitsInStock(1000);
iphone.setId(1);
listOfProducts.add(iphone);
}
public void insertProductToDatabase(Product product) {
entityManager.persist(product);
}
ProductService.class
@Service
public class ProductServiceImpl implements ProductService{
@Autowired
ProductRepository productRepository;
public void insertProductToDatabase(Product product){
productRepository.insertProductToDatabase(product);
}
ProductController 私は
@Controller
@RequestMapping("/products")
public class ProductController {
@Autowired
private ProductService productService;
@RequestMapping
public String list(Model model){
Product pr = new Product("P1", "okna", new BigDecimal(1000));
pr.setId(1);
productService.insertProductToDatabase(pr);
productService.insertProductToDatabase(productService.getProductsById("P1234"));
model.addAttribute("products", productService.getAllProducts());
return "products";
}
データベースに、ここで2つのオブジェクトを挿入しようと誰も私を助けることができますか? :)
あなたの '' ProductRepository 'がSpring DataからCrudRepositoryを拡張する場合、それをまったく実装する必要はありません - Spring Dataはそれを自動的に行います。私はこれをすべて手動でやってからしばらくしていましたが、永続してからフラッシュする必要があります。 –
chrylis
アプリケーションを永続化して実行した後にフラッシュすると、次のように書かれます。 要求の処理に失敗しました。ネストされた例外はjavax.persistence.TransactionRequiredException:トランザクションは進行中ではありません。 – Benji