Как отобразить простой объект в Hibernate - PullRequest
0 голосов
/ 16 мая 2019

Одна из моих сущностей, содержит простой объект, который содержит только два атрибута. Каков рекомендуемый способ использования аннотации hibernate / jpa для сопоставления этой сущности.

Например, как использовать карту аннотаций Деньги в отчете сущности.

public class Report{

  private long id;

  private Money amount;

}

public class Money{

  private BigDecimal value;

  private String currency;

}

1 Ответ

1 голос
/ 18 мая 2019

Вы можете достичь этого с помощью этого подхода:

Общие понятия сначала

@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 можно найти в этом посте .

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...