0

JAVA JPA の @Embeddable に問題があります。「Author」という名前のエンティティ クラスがあります。

@Entity

    @Table(name = "author")
    @XmlRootElement
    @NamedQueries({
        @NamedQuery(name = "Author.findAll", query = "SELECT a FROM Author a"),
       ...})


    public class Author implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Basic(optional = false)
        @Column(name = "aID")
        private Integer aID;
        @Column(name = "aName")
        private String aName;
        @Column(name = "aSurname")
        private String aSurname;
        @Column(name = "aPhone")
        private Integer aPhone;


        @Embedded 
        @AttributeOverrides({

         @AttributeOverride(name="city",column=@Column(name="Address")),
         @AttributeOverride(name="street",column=@Column(table="Address")),
         @AttributeOverride(name="number",column=@Column(table="Address"))
         }) private Address address;

    // set and get methods.
    }

また、「Address」という名前の埋め込み可能なクラスがあります。

@Embeddable
    @Table(name = "Address")
    @XmlRootElement
    public class Address implements Serializable 
    {
       private static final long serialVersionUID=1L;
        @Column(name="city")
        private String city;
        @Column(name="street")
        private String street;
        @Column(name="number")
        private int number;

    // get and set methods.
}

私のメインクラスでは、この値をデータベースに挿入したいと考えています。(私は mySQL を使用します) しかし、次の行でエラーが発生します: em.getTransaction.commit();

    public class CreateAuthor extends javax.swing.JFrame {

        private static final String PERSISTENCE_UNIT_NAME = "Project";
        private static EntityManagerFactory emf;

        public void CreateAuthor() {
            initComponents();
        }


        private void ekleButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
            emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
            EntityManager em = emf.createEntityManager();


            em.getTransaction().begin();


            Author author = new Author();
            author.setAID(3);
            author.setAName("Sheldon");
            author.setASurname("Smith");
            author.setAPhone(768987);
            Address adr = new Address();



             adr.setCity("Paris");
             adr.setStreet("cinar");
             adr.setNumber(12);
             author.setAddress(adr);



            em.persist(author);

            em.getTransaction().commit();  /// error occured

            em.close();       

    }
}

私のデータベース側には、Author テーブル (aID(pk),aName,aSurname,aPhone) があります。

住所表 (都市、通り、番号)

エラーが発生する理由はわかりますか?

4

1 に答える 1

1

Embeddable の目的は、エンティティのテーブル (作成者 -> 作成者) と同じテーブルにオブジェクト (アドレス) のフィールドを格納することです。

それらを別のテーブルに保存する場合は、Address はそれ自体がエンティティである必要があり、Author と Address の間に OneToOne または ManyToOne の関連付けが必要です。マッピングは、そのままでは意味がありません。

于 2013-08-02T05:40:45.527 に答える