Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 尝试使用JPA合成键查找对象时出错_Java_Hibernate_Jpa_Find_Composite Key - Fatal编程技术网

Java 尝试使用JPA合成键查找对象时出错

Java 尝试使用JPA合成键查找对象时出错,java,hibernate,jpa,find,composite-key,Java,Hibernate,Jpa,Find,Composite Key,我一直在尝试从BD表中获取一个对象,如下所示: CREATE TABLE REAL_STATES ( address VARCHAR(30) NOT NULL, admin_id VARCHAR(15) NOT NULL, resident_id VARCHAR(15), real_state_type_id INT(6) NOT NULL, block VARCHAR(3) NOT NULL, internal_id INT(5) NOT NULL, PRIMARY KEY (address,

我一直在尝试从BD表中获取一个对象,如下所示:

CREATE TABLE REAL_STATES (
address VARCHAR(30) NOT NULL,
admin_id VARCHAR(15) NOT NULL,
resident_id VARCHAR(15),
real_state_type_id INT(6) NOT NULL,
block VARCHAR(3) NOT NULL,
internal_id INT(5) NOT NULL,
PRIMARY KEY (address, block, internal_id),
FOREIGN KEY (real_state_type_id) REFERENCES REAL_STATE_TYPES (real_state_type_id),
FOREIGN KEY (admin_id) REFERENCES ADMINS (admin_id),
FOREIGN KEY (resident_id) REFERENCES RESIDENTS (resident_id)
);
@Entity
@Table(name = "real_states")
public class RealState implements Serializable{
    private static final long serialVersionUID = 4033627448194380926L;
    @EmbeddedId
    private RealStateID realStateID;
    @Column(name = "real_state_type_id")
    @Enumerated(EnumType.ORDINAL)
    private RealStateType realStateType;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "admin_id", insertable = true)
    private Admin admin;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "resident_id", referencedColumnName = "resident_id", nullable = false)
    private Resident resident;
    //getters & setters..
使用复合主键(地址、块、内部id) 我正试图使用EntityManager.find(…)在BD中找到我的一个对象,并使用下一列值:addres=A304,block=A1,internal_id=302

但我每次都会遇到这样的错误:

780 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /ProyectoSw/FindRealStateServlet: javax.persistence.EntityNotFoundException: Can't find realState forRealStateID [address=A302, block=A1, internal_id=302]
    at deployment.ProyectoSw.war//edu.uptc.model.Manager.findRealState(Manager.java:57)
我的合成密钥类是:

包edu.uptc.entity

导入java.io.Serializable; 导入java.util.Objects

导入javax.persistence.Column; 导入javax.persistence.embeddeble

@Embeddable
public class RealStateID implements Serializable {
    private static final long serialVersionUID = 6485406412363395170L;
    @Column(name = "address")
    private String address;
    @Column(name = "block")
    private String block;
    @Column(name = "internal_id")
    private int internal_id;

    public RealStateID(String address, String block, int internal_id) {
        super();
        this.address = address;
        this.block = block;
        this.internal_id = internal_id;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getBlock() {
        return block;
    }

    public void setBlock(String block) {
        this.block = block;
    }

    public int getInternal_id() {
        return internal_id;
    }

    public void setInternal_id(int internal_id) {
        this.internal_id = internal_id;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;

        RealStateID pk = (RealStateID) o;
        return Objects.equals(address, pk.address) && Objects.equals(block, pk.block)
                && Objects.equals(internal_id, pk.internal_id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(address, block, internal_id);
    }

    @Override
    public String toString() {
        return "RealStateID [address=" + address + ", block=" + block + ", internal_id=" + internal_id + "]";
    }
}
以及我试图获取的对象所属的父类。RealState是这样的:

CREATE TABLE REAL_STATES (
address VARCHAR(30) NOT NULL,
admin_id VARCHAR(15) NOT NULL,
resident_id VARCHAR(15),
real_state_type_id INT(6) NOT NULL,
block VARCHAR(3) NOT NULL,
internal_id INT(5) NOT NULL,
PRIMARY KEY (address, block, internal_id),
FOREIGN KEY (real_state_type_id) REFERENCES REAL_STATE_TYPES (real_state_type_id),
FOREIGN KEY (admin_id) REFERENCES ADMINS (admin_id),
FOREIGN KEY (resident_id) REFERENCES RESIDENTS (resident_id)
);
@Entity
@Table(name = "real_states")
public class RealState implements Serializable{
    private static final long serialVersionUID = 4033627448194380926L;
    @EmbeddedId
    private RealStateID realStateID;
    @Column(name = "real_state_type_id")
    @Enumerated(EnumType.ORDINAL)
    private RealStateType realStateType;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "admin_id", insertable = true)
    private Admin admin;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "resident_id", referencedColumnName = "resident_id", nullable = false)
    private Resident resident;
    //getters & setters..
最后是找到该对象的EntityManager方法:

public RealState findRealState(RealStateID realStateID) {
    RealState realState = em.find(RealState.class, new RealStateID("A302", "A1", 302));
    if (realState == null) {
        throw new EntityNotFoundException("Can't find realState for" + realStateID.toString());
    }
    return realState;
}

包含RealStateID(地址、块、内部_id)值的行已经在我的BD中,但出于某种原因,应用程序一直给我这个错误。我仍然不明白为什么

您确定表中的varchar列不包含前导空格或尾随空格吗?您使用什么事务隔离级别,即这些行对尝试查找对象的事务实际可见吗?