1

Beginning Java EE6 with GlassFish3 からいくつかの例を試しています。したがって、基本的にこのようなエンティティ クラスを作成しました ...

@Entity
@Table(name="Book")
public class Book implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @Column(nullable=false)
    private String name;
    @Column(nullable=false)
    private String isbn;
    private String description;

    public Book()
    {
        // Empty constructor to facilitate construction. 
        System.out.println("The variables have not been initialized...Please initialize them using the Setters or use the provided constructor");
    }

    public Book(String name, String isbn, String description) {
        this.name = name;
        this.isbn = isbn;
        this.description = description;
    }

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

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


    @Override
    public String toString() {
        return this.name + " - " + this.isbn; 
    }

    @PrePersist
    public void printPrePersist(){
        System.out.println("Persisting the book "+this.name);
    }
    @PostPersist
    public void printPostPersist(){
        System.out.println("Persisted the book "+this.name);
    }

}

そして、私はこのようにそれを持続しようとしました...

public class MainClass 
{
    public static void main(String[] args){
        Book book = new Book("Effective Java","ISBN - 1234415","A very good book on Java");
        Book book2 = new Book("Learning Java EE","ISBN - 1233415","A good book for Java EE beginners");

        // These are the necessary classes
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersistenceAppPU");
        EntityManager em = emf.createEntityManager();

        // Persist the book here
        EntityTransaction etx = em.getTransaction();
        etx.begin();
        em.persist(book);
        em.persist(book2);
        etx.commit();

        em.close();
        emf.close();

        System.out.println("The two books have been persisted");
    }
}

それは持続しますが、実行すると、次のような出力が表示されます...

The variables have not been initialized...Please initialize them using the Setters or use the provided constructor
Persisting the book Effective Java
The variables have not been initialized...Please initialize them using the Setters or use the provided constructor
Persisting the book Learning Java EE
Persisted the book Learning Java EE
Persisted the book Effective Java
The variables have not been initialized...Please initialize them using the Setters or use the provided constructor
The variables have not been initialized...Please initialize them using the Setters or use the provided constructor
The variables have not been initialized...Please initialize them using the Setters or use the provided constructor
The variables have not been initialized...Please initialize them using the Setters or use the provided constructor
[EL Info]: 2012-05-10 12:01:19.623--ServerSession(17395905)--file:/C:/Users/raviteja.s/Documents/NetBeansProjects/PersistenceApp/src/_PersistenceAppPU logout successful
The two books have been persisted

私が作成したものがないのに、なぜデフォルトのコンストラクター呼び出しが非常に多いのかわかりません...?

私が持っているサンプルの流れがどのようになっているのか誰か説明してもらえますか?

4

1 に答える 1

1

JPA は、引数のないコンストラクターを使用してエンティティをインスタンス化し、それらのエンティティのフィールドを対応するマップされたテーブルと列にバインドします。

表示される出力は、エンティティを操作するたびに JPA が行う呼び出しです。

于 2012-05-10T07:04:24.230 に答える