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