首页 > 解决方案 > 从另一个表添加值

问题描述

带有spring boot的简单应用程序,所以我使用jpa,hibernate等。

用户正在向 trip_data 添加值,其中两个值在下面显示的列中。

| ID | trip_data_begin | trip_data_end | 

|  1  |     x1         |     y1        |

|  2  |     x2         |     y2        |



|  ID | counter_data_begin | counter_data_end |

|  1  |        x1          |        y2        |

x1 - 最小值

y2 - 最高值

我想要的是将其中两个值复制到 counter_data。我可以通过查询做到这一点,但是当用户添加另一行并且 y3 高于 y2 时,counter_data 中的值不正确。也许只对 counter_data 中的最后一个复制行进行操作?

我将非常感谢您的帮助

@Entity
@Table(name = "trip_data")
public class TripData {
    @Id
    @GeneratedValue(generator = "inc")
    @GenericGenerator(name = "inc", strategy = "increment")
    private int id;
    private int tripDateBegin;
    private int hourBegin;
    private String townBegin;
    private String countryBegin;
    private long tripCounterBegin;
    private int tripDateEnd;
    private int hourEnd;
    private String townEnd;
    private String countryEnd;
    private long tripCounterEnd;

    public TripData() {
    }

   //getters and setters



@Entity
@Table(name = "counters_data")
public class CountersData {
    @Id
    @GeneratedValue(generator = "inc")
    @GenericGenerator(name = "inc", strategy = "increment")
    private int id;
    private long counterDataBegin;
    private long counterDataEnd;

    public CountersData() {
    }
// getters adn setters

标签: javaspring-boothibernatejpa

解决方案


我的理解:

您有一个表trip_data,并且希望将 的最小值trip_data_begin和最大值存储trip_data_end在另一个表中。

这种方法是可行的,但不是一个好主意,因为每次trip_data更新表时,您都必须更新trip_counter表。与其将这些信息保存在单独的表中,更好的设计是在需要时计算这些字段。您可以直接在数据库或服务中执行此操作。

我建议使用第一个选项。因此,您必须在TripDataRepository. 这是您界面中方法的一些(某种)伪代码TripDataRepository(应该描述这个想法,语法可能不是 100% 正确)

@Query("SELECT Min(d.tripDateBegin) FROM TripData d")
int getTripBegin();

推荐阅读