我目前正在开发一个带有Hibernate个实体的Java项目(详见下文)。为了测试我的数据访问对象层,我使用H2 database来填充内存数据库并向其抛出查询。在此之前,一切都很好。
但是,在模拟@EmbeddedId注释时会出现问题。
@Entity
@Table(name = "BSCOBJ")
public class BasicObject extends AbstractDomainObject {
@EmbeddedId // This annotation here
private RestrainPK restrain;
@Embeddable
public static class RestrainPK implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "CODI", nullable = false)
private String coDi;
@Column(name = "COGA", nullable = false)
private String coGa;
@Column(name = "TYOR", nullable = false)
private String tyOr;
public RestrainPK() {
}
... // Getters and setters
}
}
"只需"创建表BSCOBJ
并填充它在获取数据时没有给出任何值(当然,我检查了请求会给出结果"通常")。如何在SQL表创建/值插入请求中表示此嵌套类?这甚至可能吗?
提前致谢,
修改
根据要求,这里有一些关于SQL / Hibernate运行的示例。
创建请求:
CREATE TABLE BSCOBJ (CODI VARCHAR(5) NOT NULL, COGA VARCHAR(5) NOT NULL, TYOR VARCHAR(5) NOT NULL);
插入请求:
INSERT INTO BSCOBJ (CODI, COGA, TYOR) VALUES
('HELLO', 'MAT', 'REF'),
('BONJ', 'SOME', 'DAIL'),
('SOPA', 'KDA', 'RATIO');
Hibernate在尝试运行测试代码时给出的请求:
select r.restrain.tyOr from mypackage.BasicObject r where r.restrain.coDi = :coDi and r.restrain.coGa = :coGa
使用以下值:
coDi = "BONJ";
coGa = "SOME";
引发NoResultException
。我希望从DAIL
请求的第二行开始INSERT
。
答案 0 :(得分:0)
我只使用了@EmbeddedId
一次,但我认为您需要@AttributeOverrides
下的@EmbeddedId
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "idpk", column = @Column(name="IDPK", nullable = false),
@AttributeOverride(name = "code", column = @Column(name="CODE")
})
并从FormulePK中删除@Column
注释