Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Liquibase Hibernate:如何通过一个JoinTable设置跨越两个表的唯一约束?_Java_Sql_Hibernate_Liquibase - Fatal编程技术网

Java Liquibase Hibernate:如何通过一个JoinTable设置跨越两个表的唯一约束?

Java Liquibase Hibernate:如何通过一个JoinTable设置跨越两个表的唯一约束?,java,sql,hibernate,liquibase,Java,Sql,Hibernate,Liquibase,我有一个表容器,其中可能有N个项,通过联接表链接,每个项都有一个属性类型。另外,一个项目可以在多个容器中 如何添加唯一约束,使容器中不允许有两个具有相同类型的项 这是容器类: @Entity @Table(name = "container") @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) @Document(indexName = "container") public class Container impleme

我有一个表容器,其中可能有N个,通过联接表链接,每个项都有一个属性类型。另外,一个项目可以在多个容器中

如何添加唯一约束,使容器中不允许有两个具有相同类型的项

这是容器类:

@Entity
@Table(name = "container")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "container")
public class Container implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @ManyToMany
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    @JoinTable(name = "container_item",
               joinColumns = @JoinColumn(name="container_id", referencedColumnName="id"),
               inverseJoinColumns = @JoinColumn(name="items_id", referencedColumnName="id"))
    private Set<Item> items = new HashSet<>();
}
@Entity
@Table(name = "item")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "item")
public class Item implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(name = "type", nullable = false)
    private Type type;

    @ManyToMany(mappedBy = "items")
    @JsonIgnore
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<Container> containers = new HashSet<>();
}
@实体
@表(name=“container”)
@缓存(用法=缓存并发策略。非严格读写)
@文件(indexName=“容器”)
公共类容器实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“sequenceGenerator”)
@SequenceGenerator(name=“SequenceGenerator”)
私人长id;
@NotNull
@列(name=“name”,nullable=false)
私有字符串名称;
@许多
@缓存(用法=缓存并发策略。非严格读写)
@JoinTable(name=“container\u item”,
joinColumns=@JoinColumn(name=“container\u id”,referencedColumnName=“id”),
inverseJoinColumns=@JoinColumn(name=“items\u id”,referencedColumnName=“id”))
private Set items=new HashSet();
}
这是类:

@Entity
@Table(name = "container")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "container")
public class Container implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @ManyToMany
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    @JoinTable(name = "container_item",
               joinColumns = @JoinColumn(name="container_id", referencedColumnName="id"),
               inverseJoinColumns = @JoinColumn(name="items_id", referencedColumnName="id"))
    private Set<Item> items = new HashSet<>();
}
@Entity
@Table(name = "item")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "item")
public class Item implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(name = "type", nullable = false)
    private Type type;

    @ManyToMany(mappedBy = "items")
    @JsonIgnore
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<Container> containers = new HashSet<>();
}
@实体
@表(name=“item”)
@缓存(用法=缓存并发策略。非严格读写)
@文件(indexName=“项目”)
公共类项实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“sequenceGenerator”)
@SequenceGenerator(name=“SequenceGenerator”)
私人长id;
@NotNull
@列(name=“name”,nullable=false)
私有字符串名称;
@NotNull
@枚举(EnumType.STRING)
@列(name=“type”,nullable=false)
私有类型;
@许多(mappedBy=“items”)
@杰索尼奥雷
@缓存(用法=缓存并发策略。非严格读写)
私有集容器=新HashSet();
}
这是联接表的Liquibase更改日志:

<createTable tableName="container_item">
    <column name="items_id" type="bigint">
        <constraints nullable="false"/>
    </column>
    <column name="containers_id" type="bigint">
        <constraints nullable="false"/>
    </column>
</createTable>


您的数据库中是否有一个名为“container\u item”的表?@htsh是的,请参阅更新的说明。因此
container\u item
表没有
type
列,但您需要将其包含在约束中?是的,添加type列并设置Unique(containers\u id,types\u id)就足够了。但是如何配置hibernate来填充联接表上的这个额外字段呢?