Вы можете достичь этого с помощью этого подхода:
Общие понятия сначала
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractBaseEntity {
public static final long INVALID_OBJECT_ID = -42;
@Version
private int version;
@Id
@SequenceGenerator(name = "sequence-object", sequenceName = "ID_MASTER_SEQ")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence-object")
@Column(name = "id")
protected Long objectID = INVALID_OBJECT_ID;
public int getVersion() {
return version;
}
@Override
public long getObjectID() {
return objectID;
}
}
Конкретные аспекты второй
@Entity
public class Report extends AbstractBaseEntity {
@OneToOne(cascade=CascadeType.All)
private Money amount;
}
@Entity
public class Money extends AbstractBaseEntity {
@Column(name="value", nullable = false, scale = 3, precision = 13)
private BigDecimal value;
@Column(name="currency", nullable = false)
private String currency;
}
Таким образом, вы управляете не только первичными ключами одной таблицы сущности / базы данных, но и любого другого типа в своем домене.
Если вам нужны другие параметры для точности значения BigDecimal
, вас может заинтересовать этот ответ . Более подробную информацию о аннотации @Version
можно найти в этом посте .
Надеюсь, это поможет.