[@EmbeddedId]
1、应用于实体类或映射超类的持久字段或属性,以表示可嵌入类的组合主键。
可嵌入的类必须标注为 Embeddable。
2、使用 EmbeddedId批注时,只能有一个 EmbeddedId批注和没有 Id批注。
3、 AttributeOverride注解可用于覆盖可嵌入类中声明的列映射。
4、 MapsId注释可以与 EmbeddedId注释一起使用以指定派生的主键。
5、如果实体具有派生主键,那么 AttributeOverride注释可能仅用于覆盖嵌入 ID的那些与父实体关系不对应的属性。
6、不支持在嵌入式 id类中定义的关系映射。
@Embeddable
@Data
public class EmployeeId implements Serializable {
private int id ;
}
@Embeddable
@Data
public class DependentId implements Serializable {
private String name ;
private EmployeeId empPK ; // corresponds to primary key type of Employee
}package sun.rain.amazing.javax.anno.domain.embedded;
import lombok.Data ;
import javax.persistence.EmbeddedId ;
import javax.persistence.Entity ;
/**
* @author sunRainAmazing
*/
@Entity
@Data
public class Employee {
@EmbeddedId
private EmployeeId ids ;
private String name ;
private String email ;
}
/*
CREATE TABLE `employee` (
`id` int(11) NOT NULL,
`email` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
注意 要删除 这张表 必须先删除 dependent 这张表
改成 ids 时 -- 同样是上面的代码
CREATE TABLE `employee` (
`id` int(11) NOT NULL,
`email` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
*/
package sun.rain.amazing.javax.anno.domain.embedded;
import lombok.Data ;
import javax.persistence.*;
@Entity
@Data
public class Dependent {
// default column name for "name" attribute is overridden
@AttributeOverride (name="name" , column = @Column (name="dep_name" ))
@EmbeddedId
private DependentId id ;
@MapsId ("empPK" )
@ManyToOne
private Employee emp ;
private String name ;
private String state ;
}
/*
CREATE TABLE `dependent` (
`dep_name` varchar(255) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`state` varchar(255) DEFAULT NULL,
`emp_id` int(11) NOT NULL,
PRIMARY KEY (`emp_id`,`dep_name`),
CONSTRAINT `FKn66b78rv012l5ll5lbhk3v0em` FOREIGN KEY (`emp_id`) REFERENCES `employee` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
*/