如何正确使用entitymanager创建实体对象?

时间:2014-04-15 07:13:36

标签: java entity-framework jpa

美好的一天,

我目前正处于我的第一个JPA项目中,并且在使用和理解实体管理器时遇到了一些困难。我创建了几个类,并通过注释将它们分配为实体。现在,我正在尝试创建一个将通过entityManager创建实体对象的类。例如,我有以下课程:

@Entity
@Table(name = "product")
public class Product implements DefaultProduct {

@Id
@Column(name = "product_name", nullable = false)
private String productName;

@Column(name = "product_price", nullable = false)
private double productPrice;

@Column(name = "product_quantity", nullable = false)
private int productQuantity;

@ManyToOne
@JoinColumn(name = "Product_Account", nullable = false)
private Account parentAccount;

public Product(String productName, double productPrice,
        int productQuantity, Account parentAccount)
        throws IllegalArgumentException {

    if (productName == null || productPrice == 0 || productQuantity == 0) {
        throw new IllegalArgumentException(
                "Product name/price or quantity have not been specified.");
    }
    this.productName = productName;
    this.productPrice = productPrice;
    this.productQuantity = productQuantity;
    this.parentAccount = parentAccount;
}

public String getProductName() {
    return productName;
}

public double getPrice() {
    return productPrice * productQuantity;
}

public int getQuantity() {
    return productQuantity;
}

public Account getAccount() {
    return parentAccount;
}

}

现在,我正在尝试创建这个类:

public class CreateProduct {

private static final String PERSISTENCE_UNIT_NAME = "Product";

EntityManagerFactory factory = Persistence
        .createEntityManagerFactory(PERSISTENCE_UNIT_NAME);

public void createProduct(Product product) {
    EntityManager manager = factory.createEntityManager();
    manager.getTransaction().begin();

//code to be written here

    manager.getTransaction().commit();

}
}

请你给我一个代码示例,我必须在createProduct方法中的begin()和commit()行之间写下来;另外,如果你能解释一下entitymanager是如何工作的,我将不胜感激。我已经阅读了几篇关于此的文档,但我仍需要一些澄清。

提前致谢

1 个答案:

答案 0 :(得分:0)

 Account account - new Account();
 Product product = new Product("name", 10, 11, account);
 manager.persist(product);

根据您在字段或getter上放置@Column @OneToOne等注释时,entityManager将使用这种方式从类中获取字段值。它使用反射来读取注释,并使用它知道表应该是什么样子。通过了解表结构,它只是在后台创建一个查询,然后将其发送到数据库。在创建实体管理器工厂时,基本上会对类进行分析,并且此操作通常非常耗时(取决于数据库结构)。要大胆地了解它是如何工作的,请阅读更多关于反思的内容。如果你得到反思,你会得到它的简单。