java - 使用@Embedded 在数据库中 hibernate 空值

标签 java hibernate

你好,我正在学习 Hibernate,目前我正在尝试使用 @Embedded 注释,但是我从我的数据库中的 @Embeddable 对象中得到了空值。

代码如下:

@Entity
public class Employee {

@Id
@GeneratedValue
private int id;
private String firstName;
private String lastName;
private double salary;

@Embedded
private Adress adress;

public Adress getAdress() {
    return adress;
}


public void setAdress(Adress adress) {
    this.adress = adress;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public double getSalary() {
    return salary;
}

public void setSalary(double salary) {
    this.salary = salary;
}

这就是我的 Employee 类,它包含来自 Adress.class 的 @embedded 字段 Adress 类来了:

@Embeddable
public class Adress {
private String locality;
private String streetNumber;
private String zipCode;


public String getLocality() {
    return locality;
}
public void setLocality(String locality) {
    this.locality = locality;
}
public String getStreetNumber() {
    return streetNumber;
}
public void setStreetNumber(String streetNumber) {
    this.streetNumber = streetNumber;
}
public String getZipCode() {
    return zipCode;
}
public void setZipCode(String zipCode) {
    this.zipCode = zipCode;
}


}

那是我的主课:

public class Main {

public static void main(String[] args) {

    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myDatabase");
    EntityManager entityManager = entityManagerFactory.createEntityManager();

    Employee employee = new Employee();
    Adress adress = new Adress();
    adress.setLocality("New York");
    adress.setZipCode("55-5555");
    adress.setStreetNumber("55");

    employee.setFirstName("Andy");
    employee.setLastName("Cole");
    employee.setSalary(3333);

    entityManager.getTransaction().begin();
    entityManager.persist(employee);
    entityManager.getTransaction().commit();
    entityManager.close();
    entityManagerFactory.close();

}

}

因此与类 Employee 相关的字段毫无问题地进入数据库,但是与类 Adress 相关的字段被设置为空。我想让它们作为 setValues。在此先感谢大家。

最佳答案

您缺少 setAddress 调用

public class Test {

    public static void main(String[] args) {

        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myDatabase");
        EntityManager entityManager = entityManagerFactory.createEntityManager();

        Employee employee = new Employee();
        Adress adress = new Adress();
        adress.setLocality("New York");
        adress.setZipCode("55-5555");
        adress.setStreetNumber("55");

        employee.setFirstName("Andy");
        employee.setLastName("Cole");
        employee.setSalary(3333);

        employee.setAdress(adress);

        entityManager.getTransaction().begin();
        entityManager.persist(employee);
        entityManager.getTransaction().commit();
        entityManager.close();
        entityManagerFactory.close();
    }
}

关于java - 使用@Embedded 在数据库中 hibernate 空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36150254/

相关文章:

java - Criteria API 的性能问题

hibernate - 在 Web 应用程序之间共享开源 (Spring/Spring Security/Hibernate/etc) jar

hibernate - 单向 ManyToOne : Why transient instance saved with CascadeType. ALL 但不是 CascadeType.PERSIST

java - 如何通过 Documentum 中的 DFC 代码使用新的更新文件 checkin 文件

java - 内联 WSDL 而不是 wsdl :import

macos - 无法在 Mac OS X (Mountain Lion 10.8.4) 上卸载 Java 7 JDK

java - 以编程方式在 ExpandableListView 中执行 subview 单击

mysql - 在 Mysql 中加入 HQL 更新的替代方法

java - 如何实现像Hibernate一样的惰性getObject方法?

java - 如何使 Java 9 在 HiDPI 显示器上使用更高分辨率的图像?