我有一个与hibernate映射相关的查询。我必须使用hibernate将父表的2个唯一列映射为子实体中的2个外键。
前 - 父表 -
CREATE TABLE TAB_PROD
(
"TAB_PROD_ID" NUMBER(30,0) NOT NULL ENABLE,
"PROD_GEN_ID" NUMBER(30,0) NOT NULL ENABLE,
"TAB_PROD_GEN_ID" NUMBER(30,0) NOT NULL ENABLE,
CONSTRAINT "PK_TAB_PROD" PRIMARY KEY ("TAB_PROD_ID")
CONSTRAINT "AK_TAB_PROD_GEN" UNIQUE ("PROD_GEN_ID", "TAB_PROD_GEN_ID")
)
子表 -
CREATE TABLE CHILD
(
"CHILD_ID" NUMBER(30,0) NOT NULL ENABLE,
"PROD_GEN_ID" NUMBER(30,0) NOT NULL ENABLE,
"TAB_PROD_GEN_ID" NUMBER(30,0) NOT NULL ENABLE,
CONSTRAINT "FK_CHD" FOREIGN KEY ("PROD_GEN_ID", "TAB_PROD_GEN_ID")
REFERENCES TAB_PROD ("PROD_GEN_ID", "TAB_PROD_GEN_ID") ENABLE
)
以上是2个表,PROD_GEN_ID
和TAB_PROD_GEN_ID
是子表中的引用键。
请帮助我使用Annotation在hibernate中正确映射。
答案 0 :(得分:0)
试试这个:
TAB_PROD.java
import java.io.Serializable;
import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity(name="TAB_PROD")
public class TAB_PROD implements Serializable {
@Id
private BigDecimal TAB_PROD_ID;
@Column (name = "PROD_GEN_ID", unique = true)
private BigDecimal PROD_GEN_ID;
@Column (name = "TAB_PROD_GEN_ID", unique = true)
private BigDecimal TAB_PROD_GEN_ID;
public BigDecimal getTAB_PROD_ID() {
return TAB_PROD_ID;
}
public void setTAB_PROD_ID(BigDecimal TAB_PROD_ID) {
this.TAB_PROD_ID = TAB_PROD_ID;
}
public BigDecimal getPROD_GEN_ID() {
return PROD_GEN_ID;
}
public void setPROD_GEN_ID(BigDecimal PROD_GEN_ID) {
this.PROD_GEN_ID = PROD_GEN_ID;
}
public BigDecimal getTAB_PROD_GEN_ID() {
return TAB_PROD_GEN_ID;
}
public void setTAB_PROD_GEN_ID(BigDecimal TAB_PROD_GEN_ID) {
this.TAB_PROD_GEN_ID = TAB_PROD_GEN_ID;
}
}
CHILD.java
import java.math.BigDecimal;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.OneToOne;
@Entity(name="CHILD")
public class CHILD {
@Id
private BigDecimal CHILD_ID;
@OneToOne
@JoinColumns({
@JoinColumn(name = "PROD_GEN_ID", referencedColumnName = "PROD_GEN_ID"),
@JoinColumn(name = "TAB_PROD_GEN_ID", referencedColumnName = "TAB_PROD_GEN_ID")
})
private TAB_PROD tab_prod;
public BigDecimal getCHILD_ID() {
return CHILD_ID;
}
public void setCHILD_ID(BigDecimal CHILD_ID) {
this.CHILD_ID = CHILD_ID;
}
public TAB_PROD getTab_prod() {
return tab_prod;
}
public void setTab_prod(TAB_PROD tab_prod) {
this.tab_prod = tab_prod;
}
}
结果
-- --------------------------------------------------------
--
-- Table structure for table `child`
--
CREATE TABLE IF NOT EXISTS `child` (
`CHILD_ID` decimal(19,2) NOT NULL,
`PROD_GEN_ID` decimal(19,2) DEFAULT NULL,
`TAB_PROD_GEN_ID` decimal(19,2) DEFAULT NULL,
PRIMARY KEY (`CHILD_ID`)
)
-- --------------------------------------------------------
--
-- Table structure for table `tab_prod`
--
CREATE TABLE IF NOT EXISTS `tab_prod` (
`TAB_PROD_ID` decimal(19,2) NOT NULL,
`PROD_GEN_ID` decimal(19,2) DEFAULT NULL,
`TAB_PROD_GEN_ID` decimal(19,2) DEFAULT NULL,
PRIMARY KEY (`TAB_PROD_ID`),
UNIQUE KEY `UK_iublvy229lc81t85wqlfgs0fm` (`PROD_GEN_ID`,`TAB_PROD_GEN_ID`),
UNIQUE KEY `UK_omdfd8sbm741v0yqiv4wist1t` (`PROD_GEN_ID`),
UNIQUE KEY `UK_3ox5nbcchj4wrjkyggrl7s01j` (`TAB_PROD_GEN_ID`)
)
希望它有效。
如果这不是理想的结果,那么请告诉我。
答案 1 :(得分:0)
@Table(uniqueConstraints = {@的UniqueConstraint(COLUMNNAMES = { “TAB_PROD_ID”, “TAB_PROD_GEN_ID”})})
public class TabProd { ...