【问题标题】:The JPA doesn't add compound constrait to tableJPA 不会向表中添加复合约束
【发布时间】:2018-03-12 09:41:21
【问题描述】:

当试图避免重复插入相同的值到两列的组合(例如“first_name”和“last_name”)时,我使用注释

@Table(name = "author",
        uniqueConstraints = {@UniqueConstraint(columnNames = {"first_name", "last_name"})})

正如我在相关主题中所读到的。但它不起作用。我使用 JPA Hibernate、DBeaver。

这是课程。

package domain;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Table(name = "author",
        uniqueConstraints = {@UniqueConstraint(columnNames = {"first_name", "last_name"})})
@Entity
@SequenceGenerator(name = "author_id_gen", sequenceName = "author_id", initialValue = 1, allocationSize = 1)
public class Author {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "author_id_gen")
    private int id;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
    @JoinTable(name = "author_address", joinColumns = @JoinColumn(name = "author_fk_id"),
            inverseJoinColumns = @JoinColumn(name = "address_fk_id"))
    private List<Address> address;

    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
    @JoinColumn(name = "author_fk_id")
    private List<Phone> phones;

    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
    @JoinColumn(name = "author_fk_id")
    private List<EMail> eMails;

    public Author(String firstName, String lastName) {

        this.firstName = firstName;
        this.lastName = lastName;
        this.address = new ArrayList<>();
        this.phones = new ArrayList<>();
        this.eMails = new ArrayList<>();
    }

    public Author() {
    }

    public void addAddress(Address address) {
        this.address.add(address);
    }

    public void addPhone(Phone phone) {
        this.phones.add(phone);
    }

    public void addEMail(EMail eMail) {
        this.eMails.add(eMail);
    }


}

【问题讨论】:

    标签: java mysql hibernate dbeaver


    【解决方案1】:

    你可以用这个,

    @Table(name = "res_location", uniqueConstraints = {
      @UniqueConstraint(name = "UK_LOCATION_NAME", columnNames = { "name" }) })
    

    【讨论】:

    • 您的期望是什么?你可以分享你的创建表的脚本吗?
    • 你没有添加唯一的约束名称并共享你的脚本以供参考。
    • 我之前已经完成了,就像你写的一样。是一样的。抱歉,ref 的脚本是什么?
    • 建表脚本。
    • 我不在数据库中创建表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2017-09-04
    • 2015-03-27
    • 2016-01-17
    相关资源
    最近更新 更多