gpt4 book ai didi

java - Hibernate 中是否可能存在多个自然标识符组合?

转载 作者:行者123 更新时间:2023-12-05 07:46:56 24 4
gpt4 key购买 nike

请考虑以下示例:

import org.hibernate.annotations.NaturalId;

import javax.persistence.Column;
import javax.persistence.Table;

@javax.persistence.Entity
@Table(name = "Entity", uniqueConstraints = {
@javax.persistence.UniqueConstraint(columnNames = {"firstNaturalId"}),
@javax.persistence.UniqueConstraint(columnNames = {"secondNaturalIdPart1", "secondNaturalIdPart2"})
})
class Entity {

@NaturalId
@Column(name = "firstNaturalId")
private String firstNaturalId;

@NaturalId
@Column(name = "secondNaturalIdPart1")
private String secondNaturalIdPart1;

@NaturalId
@Column(name = "secondNaturalIdPart2")
private String secondNaturalIdPart2;

// The remainder is omitted.

}

所需的功能是能够通过提供 ('firstNaturalId') 或 ('secondNaturalIdPart1', 'secondNaturalIdPart2') 组来检索唯一标识的实体.

在 Hibernate 中是否可能有几个自然标识符组合(组)来唯一标识表中的实体?

最佳答案

好久不见。也许你已经找到了答案。我心里有这个疑问。发现你的问题没有答案。搜索了更多。找到这个Natural Id Mapping .

public class Entity{

@NaturalId @Embedded
private EntityNI entityNI;

public Entity(){}

// Setter and Getter is omitted
// .
// .
// .

@Override
public int hashCode(){
return (entityNI != null ? entityNI.hashCode() : 31);
}

@Override
public boolean equals(final Object object){
if(this == object){
return true;
}
if( !(object instanceof Entity) || (getClass() != object.getClass()) ){
return false;
}
return this.entityNI.equals( ((Entity)object).entityNI );
}
}

以及嵌入的自然 ids:

@Embeddable
public class EntityNI{

@NotBlank @Basic(optional = false) @Column(name = "firstNaturalId")
private String firstNaturalId;

@NotBlank @Basic(optional = false) @Column(name = "secondNaturalIdPart1")
private String secondNaturalIdPart1;

@NotBlank @Basic(optional = false) @Column(name = "secondNaturalIdPart2")
private String secondNaturalIdPart2;

public EntityNI(){}

// Setters and Getters are omitted
// .
// .
// .

@Override
public int hashCode(){
return Objects.hash(firstNaturalId, secondNaturalIdPart1, secondNaturalIdPart2);
}

@Override
public boolean equals(Object object){
if(this == object){
return true;
}
if( !(object instanceof EntityNI) || (getClass() != object.getClass()) ){
return false;
}
final EntityNI other = (EntityNI) object;
return (this.firstNaturalId == other.firstNaturalId) && (this.secondNaturalIdPart1 == other.secondNaturalIdPart1) && (this.secondNaturalIdPart2 == other.secondNaturalIdPart2);
}
}

关于java - Hibernate 中是否可能存在多个自然标识符组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40393918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com