Вставить данные в несколько таблиц, используя один запрос JPA - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу создать JPA-запросы для фильтров риска, используя несколько таблиц.У меня есть эти таблицы, которые я хотел бы использовать для хранения данных:

Фильтр риска:

@Entity
@Table(name = "risk_filters")
public class RiskFilters implements Serializable {

    private static final long serialVersionUID = -31232741713890134L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", unique = true, updatable = false, nullable = false)
    private int id;

    @Column(length = 4)
    private Integer terminal_id;

    @Column(length = 255)
    private String filter_class;

    @Column(name = "FILTER_SETTINGS", columnDefinition = "TEXT", length = 65535)
    private String filter_settings;

    @Column(length = 4)
    private Integer position;

    @Column(length = 4)
    private Integer parent_id;

    @Column
    private LocalDateTime created_at;

    @Column
    private TemporalType updated_at;
    .....
}

Параметры риска:

@Entity
@Table(name = "risk_parameters")
public class RiskParameters implements Serializable {

    private static final long serialVersionUID = 6828168899788931021L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", unique = true, updatable = false, nullable = false)
    private int id;

    @Column(length = 4)
    private Integer payment_transaction_id;

    @Column(length = 32)
    private String name;

    @Column(length = 128)
    private String value;

    @Column
    private LocalDateTime created_at;

    @Column
    private LocalDateTime updated_at;
    ....
}

Детали риска:

@Entity
@Table(name = "risk_details")
public class RiskDetails implements Serializable {

    private static final long serialVersionUID = 6122869200132217334L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", unique = true, updatable = false, nullable = false)
    private int id;

    @Column(length = 4)
    private Integer payment_transaction_id;

    @Column(length = 32)
    private String service_name;

    @Column(length = 64)
    private String name;

    @Column(length = 512)
    private String value;
    .....
}

Как я могу вставить данные в эти объекты с помощью одной вставки и получить данные с помощью одного выбора?

Я хотел бы использовать JPA для получения и вставки данных.

1 Ответ

0 голосов
/ 16 ноября 2018

Это возможно, если у вас есть связь между таблицами (risk_filters, risk_parameters & risk_details), т.е. первичный ключ и внешний ключ отношение.

Предположим, что risk_filters имеет отношение один к одному с risk_parameters & risk_details , тогда сущность будет выглядеть как

@Entity
@Table(name = "risk_filters")
public class RiskFilters implements Serializable {

private static final long serialVersionUID = -31232741713890134L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", unique = true, updatable = false, nullable = false)
private int id;

@Column(length = 4)
private Integer terminal_id;

@Column(length = 255)
private String filter_class;

@Column(name = "FILTER_SETTINGS", columnDefinition = "TEXT", length = 65535)
private String filter_settings;

@Column(length = 4)
private Integer position;

@Column(length = 4)
private Integer parent_id;

@Column
private LocalDateTime created_at;

@Column
private TemporalType updated_at;

@OneToOne
@JoinColumn(name="risk_filter_id", nullable=false)
private RiskParameters riskParameters;

@OneToOne
@JoinColumn(name="risk_filter_id", nullable=false)
private RiskDetails riskDetails;
.....
}

и вызов сохранитсяметод для сохранения только RiskFilters Сущность, как показано ниже.

riskFilterObject.setRiskDetails(riskDetailsObject);
riskFilterObject.setRiskParamarets(riskParametersObject);
repository.save(riskFilterObject);// update 3 tables
repository.save(riskDetailsObject); // update only risk_details table
repository.save(riskParametersObject);// update only risk_parameters table

Обновление:

Как насчет выбора?Можете ли вы показать мне, как реализовать выбор из всех сущностей?

RiskFilters filters = riskFiltersRepository.findOne(id);
// для полного netsed RiskFilters Объект Entity

RiskParameter param = riskParameterRepository.findOne(id);
// только для RiskParameter объект сущности

RiskDetails details = riskDetailsRepository.findOne(id);
// только для RiskDetails объект сущности

...