Чтобы иметь составной первичный ключ, вы можете использовать подход с ключом @IdClass
или @Embeddable
.
Чтобы продолжить подход @IdClass
, вам необходимо следовать некоторым правилам,
- Составной класс первичного ключа должен быть publi c
- Он должен иметь конструктор без аргументов
- Он должен определять методы equals () и hashCode ()
- Он должен быть Serializable
Итак, в вашем случае класс будет выглядеть так:
@Entity
@Table( name = "SECU" )
@IdClass( SECU.class )
public class SECU implements Serializable
{
@Id
@Column(name = "columnName") // use the correct column name if it varies from the variable name provided
protected String esn;
@Id
@Column(name = "columnName") // use the correct column name if it varies from the variable name provided
protected BigDecimal techrcrdid;
@Column(name = "columnName") // use the correct column name if it varies from the variable name provided
protected BigDecimal preTradLrgInScaleThrshld;
@Column(name = "columnName") // use the correct column name if it varies from the variable name provided
@Temporal( TemporalType.TIMESTAMP)
protected LocalDateTime CreDt;
@Column(name = "columnName") // use the correct column name if it varies from the variable name provided
protected String fullnm;
@Override
public boolean equals( Object o )
{
if( this == o ) return true;
if( !( o instanceof SECU ) ) return false;
SECU secu = ( SECU ) o;
return Objects.equals( esn, secu.esn ) &&
Objects.equals( techrcrdid, secu.techrcrdid ) &&
Objects.equals( preTradLrgInScaleThrshld, secu.preTradLrgInScaleThrshld ) &&
Objects.equals( CreDt, secu.CreDt ) &&
Objects.equals( fullnm, secu.fullnm );
}
@Override
public int hashCode()
{
return Objects.hash( esn, techrcrdid, preTradLrgInScaleThrshld, CreDt, fullnm );
}
// getters and setters
}
Также дважды проверьте свои геттеры и сеттеры в каждом классе сущности, один раз, указанный в вашем вопросе, кажется неправильным.