2016-03-22 6 views
2

こんにちは私は@Embeddedアノテーションを使用しようとしていますが、現在私はDB内の@Embeddableオブジェクトからヌルを取得しています。次のように@EmbeddedでDB内のHibernate nullを返します

コードは次のとおりです。

@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フィールドがここに住所クラスが来る:

@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; 
} 


} 

と私のメインのthatsクラス:

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(); 

} 

} 

従業員クラスに関連するフィールドは、データベースに移動します問題はありませんが、クラスAdressに関連するフィールドはnullに設定されます。私はそれらをsetValuesとして持っていたいと思います。事前にすべてに感謝します。

答えて

1

あなたは

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(); 
    } 
} 
+0

感謝!、私は種類のそれのように考えますが、注釈がすべてを扱うことを考えられていたsetAddressコールを逃しています。 – filemonczyk

+0

試してみましたか? – VinhNT

+0

さようなら、それはあなたのヒントによって完了し、働いています – filemonczyk

0

従業員が現在の実装で従業員が自分のアドレスを認識していないので、従業員を永続化する前に、作成したAdressオブジェクトを従業員に設定する必要があります。

employee.setAdress(adress); 
関連する問題