0
を保存しないI私は休止状態を使用して保存したい、次のオブジェクトがあります。Hibernateは複雑なオブジェクト
@Entity
@Table(name = "setting")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Setting
{
@Id
@Column(name = "id")
public String internalID;
@Column(name = "name")
public String name;
@Column(name = "type")
public String type;
@Column(name = "regex")
public String regex;
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "setting",
joinColumns = {@JoinColumn(name = "parent_id")},
inverseJoinColumns = {@JoinColumn(name = "id")})
public Collection<Setting> children;
@JsonIgnore
@Column(name = "parent_id")
public String parentID;
@Column(name = "value")
public String value;
public Setting()
{
this.internalID = UUID.randomUUID().toString();
}
}
Hibernateはこれを保存しようとするが、子オブジェクトで失敗しているようだが。 深さが3層のSetting
オブジェクトを作成すると、最初の2つのレイヤーだけが保存され、3つ目のレイヤーは無視されます。
さらに、2番目のレイヤーではinternalIDとparentIDのみが保存され、name、type、およびregex nullはデータベースに残ります。データベースのセーブ機能
:
public static void saveObject(Object obj)
{
if(sessionFactory == null)
init();
try(Session session = sessionFactory.openSession())
{
session.beginTransaction();
session.save(obj);
session.getTransaction().commit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
それは私が行方不明だということは何ですか? 注釈が間違っていますか?
再現手順:
CREATE SCHEMA `cosmos` ;
CREATE TABLE `cosmos`.`setting` (
`id` VARCHAR(64) NOT NULL,
`name` VARCHAR(256) NULL,
`type` VARCHAR(7) NOT NULL,
`regex` VARCHAR(512) NULL,
`value` VARCHAR(512) NULL,
`parent_id` VARCHAR(64) NULL,
PRIMARY KEY (`id`));
CREATE TABLE `cosmos`.`setting_relation` (
`id` VARCHAR(64) NOT NULL,
`parent_id` VARCHAR(64) NULL,
PRIMARY KEY (`id`));
と設定:
<hibernate-configuration>
<session-factory name="localConnection">
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property
name="hibernate.connection.url">
jdbc:mysql://localhost:3306/cosmos?useSSL=false
</property>
<property name="hibernate.connection.username">
root
</property>
<property name="hibernate.connection.password">
****
</property>
<!-- List of XML mapping files -->
<mapping class="se.mulander.cosmos.settings.model.Setting"/>
</session-factory>
</hibernate-configuration>
http://i.imgur.com/PyadZkm.png Hibernateは:挿入(名前、PARENT_IDを設定することに これは1つの保存を試行するだけです... – munHunger
私はバリアント2のマッピングを更新しました。show_sqlを使って試してみてください。.....(これは、正規表現、型、値、ID) @ManyToOne(オプション= true) @JoinColumn(name = "parent_id") public親を設定します。 @OneToMany(fetch = FetchType.EAGER、mappedBy = "親"、カスケード= {CascadeType.ALL}) public Collection children; –
xyz
Plsはspamのように見えるすべてのコメントを削除し、このマッピングを試して結果を出します。そしてSQLログ – xyz