したがって、私は彼のタイプで単純なリレーションクライアントを持っています。すべてのエンティティはIDとソースシステムIDによって識別されるので、私はどこでも複合キーを持っています。クライアントエンティティを保存しているときに自動的に入力する方法プライマリキーと外部キーとしてのHibernateマッピングフィールド
Clientクラス:
public class Client implements Serializable {
@EmbeddedId
private ClientKey primaryKey;
@ManyToOne
@JoinColumns({
@JoinColumn(insertable = false, updatable = false, name = "client_type", referencedColumnName = "dict_id"),
@JoinColumn(insertable = false, updatable = false, name = "client_own_id", referencedColumnName = "dict_own_id"),
})
private Type type;
}
主キー
@Embeddable
public class ClientKey implements Serializable {
@Column(name = "client_id")
private String clientId;
@Column(name = "client_own_id")
private String clientOwnId;
}
型クラス
@Entity
public class Type implements Serializable {
@EmbeddedId
private DictKey primaryKey; //dict_id and dict_own_id
...
}
私はコードを実行しています:
clientRepo.create(client); //client contains setted type as typeRepo.getById(1).
トランザクション後、クライアントは保存されましたが、client_type列にはnullが含まれています。私が理解したところでは、問題は挿入可能/更新可能= falseです。だから私は
@JoinColumn(insertable = true, updatable = true, name = "client_type", referencedColumnName = "dict_id"), //true since I want to have updated client_type field
@JoinColumn(insertable = false, updatable = false, name = "client_own_id", referencedColumnName = "dict_own_id"), //false since I have this field in primary key already
をsettedその後私は取得しています:
Mixing insertable and non insertable columns in a property is not allowed
は、私は本当の両方を設定しています:
@JoinColumn(insertable = true, updatable = true, name = "client_type", referencedColumnName = "dict_id"), //true since I want to have saved client_type field
@JoinColumn(insertable = true, updatable = true, name = "client_own_id", referencedColumnName = "dict_own_id"), //true because I dont know why :D
を、その後:
repeated column in mapping for entity: Client column: client_own_id (should be mapped with insert="false" update="false")
私はこれ以上を持っていませんアイデア...
編集:私はクライアントエンティティへの関係を持っている場合は、以下の は、ことを除いて正常に見える:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(insertable = false, updatable = false, name = "client_id", referencedColumnName = "client_id"),
@JoinColumn(insertable = false, updatable = false, name = "client_own_id", referencedColumnName = "client_own_id"),
})
private Client client;
I'amはあなたがここに持っていることは、クライアントが持っている場合であるように見えます
Unable to find column with logical name: client_own_id in client
[引用]トランザクションの後、私はクライアントに保存されているが、 client_status列にはnullがあります。[end quote]あなたのコードでclient_status列はどこにありますか? – borowis
sry私はスペルが間違っています。 status = type。私はそれを修正しました – user2771738