Hibernate 是一个 Java 持久化框架,用于将对象映射到关系型数据库中的表。在 Hibernate 中,复合主键是指一个表中有多个列作为主键的情况。处理复合主键的方法如下:
@Entity
@Table(name = "my_table")
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "key1")
private String key1;
@Column(name = "key2")
private String key2;
// Getter and Setter methods
}
@IdClass
注解:如果实体类中的复合主键不是由自动生成的列(如 id
)组成,而是由普通的属性组成,那么需要在实体类上使用 @IdClass
注解,并创建一个单独的类来表示复合主键。@Entity
@Table(name = "my_table")
@IdClass(MyCompositeKey.class)
public class MyEntity {
@Id
@Column(name = "key1")
private String key1;
@Id
@Column(name = "key2")
private String key2;
// Getter and Setter methods
}
public class MyCompositeKey implements Serializable {
private String key1;
private String key2;
// Constructor, Getter and Setter methods
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyCompositeKey that = (MyCompositeKey) o;
return Objects.equals(key1, that.key1) &&
Objects.equals(key2, that.key2);
}
public int hashCode() {
return Objects.hash(key1, key2);
}
}
@EmbeddedId
注解:另一种处理复合主键的方法是使用 @EmbeddedId
注解。这种方法将复合主键嵌入式对象,实体类中只需要包含一个表示复合主键的属性。@Entity
@Table(name = "my_table")
public class MyEntity {
@EmbeddedId
private MyCompositeKey id;
// Getter and Setter methods
}
public class MyCompositeKey implements Serializable {
@Column(name = "key1")
private String key1;
@Column(name = "key2")
private String key2;
// Constructor, Getter and Setter methods
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyCompositeKey that = (MyCompositeKey) o;
return Objects.equals(key1, that.key1) &&
Objects.equals(key2, that.key2);
}
public int hashCode() {
return Objects.hash(key1, key2);
}
}
这些方法都可以用于处理 Hibernate 中的复合主键。选择哪种方法取决于具体的需求和场景。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。