テーブル内の列をHibernateUnUniqueify(解決済み)
フィールドセット自体を一意ではなく、他のフィールドと組み合わせて一意にするために、2つの列(複合主キー)を持つこのテーブルを取得しました。id(主キー)とobject_proxy_id(主キー)。これはまさに私が必要とするものですが、hibernateはobject_proxy_idをそれ自体で一意に設定して、値がテーブル内で重複できないようにします。重複する値を受け入れるには、この列が必要です。すべてのユーザーが独自のオブジェクトプロキシを持っており、これらのプロキシは必ずしも一意である必要はないためです。
これが私が達成したいことです:
|-------------------------------|
| tbl_object_proxy |
| ------------------------------|
| Id (pk)| object_proxy_id (pk) |
|-------------------------------|
| 1 | 150 -- |
| 1 | 149 |= must be able to be DUPLICATE which is not the case right now.
| 2 | 150 -- |
| 2 | 151 |
|-------------------------------|
現在のコード:
@Entity
@Table(name = "tbl_user_settings", uniqueConstraints = {@UniqueConstraint(columnNames={"user_id"})})
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Settings implements Serializable
{
@Id
@SequenceGenerator(name="someSequence", sequenceName="SEQ_SOMENAME", allocationSize =1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="someSequence")
@Column(name="id")
private int setting_id;
@OneToOne
private User user;
@ManyToOne
private SomeObject someobject;
@ElementCollection
@CollectionTable(name="tbl_collection_name", joinColumns=
@JoinColumn(name="id"), uniqueConstraints = {@UniqueConstraint(columnNames={"id", "object_proxy_id"})})
@Column(name="SomeObject")
private Set<SomeObject> objectProxy;
/*...constructors and methods...*/
}
結果:
-- Table schema
|-------------------|
| tbl_user_settings |
|-------------------|
| id |PK <<Unique>>
| user_id |FK reference tbl_user <<Unique>>
| object_id |FK reference tbl_object
|-------------------|
|------------------|
| tbl_object_proxy |
|------------------|
| id |PK reference tbl_user_settings
| object_proxy_id |PK reference tbl_object <<Unique>> BUT I DON'T WANT THIS TO BE UNIQUE ON ITSELF !!!!
|------------------|
編集:
tbl_object_proxyの2つの主キーは複合主キーです。Xeon
のソリューションを試しましたが、機能しませんでした。