em.getTransaction().commit()上出错;使用JPA@embeddeble注释

em.getTransaction().commit()上出错;使用JPA@embeddeble注释,jpa,embeddable,Jpa,Embeddable,我对JAVA JPA中的@Embeddeble有一些问题。 我有一个名为“Author”的实体类: 我还有一个名为“Address”的可嵌入类: 在我的主类中,我想将这些值插入数据库。(我使用mySQL)但是我在这一行上得到一个错误:em.getTransaction.commit() 在数据库方面,我有Author表(aID(pk)、aName、aSurname、aPhone) 地址表(城市、街道、编号) 您知道发生错误的原因吗?可嵌入的目标是将对象(地址)的字段存储在与实体的表(Author

我对JAVA JPA中的@Embeddeble有一些问题。 我有一个名为“Author”的实体类:

我还有一个名为“Address”的可嵌入类:

在我的主类中,我想将这些值插入数据库。(我使用mySQL)但是我在这一行上得到一个错误:em.getTransaction.commit()

在数据库方面,我有Author表(aID(pk)、aName、aSurname、aPhone)

地址表(城市、街道、编号)


您知道发生错误的原因吗?

可嵌入的目标是将对象(地址)的字段存储在与实体的表(Author->Author)相同的表中


若要将它们保存在另一个表中,那个么地址本身应该是一个实体,并且作者和地址之间应该有一个one或manytone关联。现在的映射没有任何意义。

我应该怎么做才能修复它?要为作者表中的地址信息创建新字段,请首先确定所需内容。您想将地址存储在同一个表中,还是另一个表中?两者都有可能。这是你的选择。我想将它们存储在同一个表中。当我删除以下内容时:@AttributeOverrides({@AttributeOverride(name=“city”,column=@column(name=“Address”),@AttributeOverride(name=“street”,column=@column(table=“Address”),@AttributeOverride(name=“number”,column=@column(table=“Address”))并将列添加到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.
    }
@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.
}
    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();       

    }
}