基本的な休止状態の永続性

私はマップされたPOJOを保持する必要があります。そのPOJOには、別のPOJOがあり、外部キーにバインドされています。
今、私が新しいオブジェクトを作成し、それをHibernateで永続化すると、Hibernateは埋め込みPOJOを永続化しますか?それとも手動で行う必要がありますか?
基本的には、「逆カスケード」に関する問題です。

私の場合、これは起こりません。事前に組み込みPOJOを保持しないと例外が発生します。

Edit: Here are some code, I omitted some of the details (setters & getters): This is the Person Class, as you can see, it has an Address class embedded in it.

@Entity
public class Person {

    protected Address address;
    protected String privateName;
    ...
    /* More members */

    @ManyToOne
    @JoinColumn(name = "address_id", nullable = false, unique = true)
    public Address getAddress() {
        return this.address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Column(name = "private_name", nullable = false, length = 45)
    public String getPrivateName() {
        return this.privateName;
    }

    public void setPrivateName(String privateName) {
        this.privateName = privateName;
    }
}

これはAddressクラスです:

@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
@SuppressWarnings("serial")
@Entity
@Table(name = "address")
public class Address implements java.io.Serializable {

    private Integer id; 
    private Country country;
    private State state;
    private String city;
    private String street;
    private String number;
    private String postcode;
    private float longitude;
    private float latitude;

    public Address() {
    }

    public Address(Integer id, Country countries, String city, String street,
        String number, String postcode, float longitude, float latitude) {
    this.id = id;
    this.country = countries;
    this.city = city;
    this.street = street;
    this.number = number;
    this.postcode = postcode;
    this.longitude = longitude;
    this.latitude = latitude;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
    return this.id;
    }

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

    @ManyToOne
    @JoinColumn(name = "state")
    public State getState() {
    return this.state;
    }

    public void setState(State state) {
    this.state = state;
    }

    @ManyToOne
    @JoinColumn(name = "country", nullable = false)
    public Country getCountry() {
    return this.country;
    }  
}

Springで使用しているHibernateの設定を以下に示します。


        
        

    

    
        
            
        
        

        
            
                org.hibernate.dialect.H2Dialect
                create
                true
            
        
    

    
        
            
        
    
0
@アレックス、私はあなたのためにクラスを追加しました
追加された 著者 stdcall,
Hibernateは、それらのオブジェクトを正しくマップしている限り、これらのオブジェクトの両方を確実に保持します。それが起こっていない理由を説明するために、クラスとHibernateの設定を見る必要があります。
追加された 著者 Alex Barnes,
hbm.xmlファイルを共有できますか?
追加された 著者 melihcelik,
@Mellowcandle、JB Nizetの答えを試しましたか?
追加された 著者 melihcelik,
エンティティAがエンティティBで構成されているか、エンベディッド型であることを意味するのですか?エンティティAは組み込みBですか?
追加された 著者 Piotr Nowicki,

2 答え

いいえ、あなたがHibernateにそれを行うよう指示しない限り、永続性はカスケードされません

@ManyToOne(cascade = CascadeType.PERSIST)

See http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#objectstate-transitive

1
追加された
@ManyToOne(cascade = CascadeType.DETACH)
@JoinColumn(name = "address_id", nullable = false, unique = true)
public Address getAddress() {
    return this.address;
}

多分あなたの問題を解決するコードの上

上のコードのように、接続されたPOJOでどのように休止状態が動作するかを指定できます。

私はそれが助けて欲しい

0
追加された
私はあなたが話していることの手がかりを持っていません。説明できる ?
追加された 著者 stdcall,
私は答えを更新しました
追加された 著者 Yusuf K.,