我想从表A
复制一个条目到表B
。表A
和B
具有相同的列。
要做到这一点,我需要两个Java实体:
@Entity
@Table(name = "A")
public class TableA{
@Id
@GeneratedValue
@SequenceGenerator(name="my_seq",sequenceName="MY_SEQ", allocationSize=1)
@Column(name = "id")
private int id;
}
@Entity
@Table(name = "B")
public class TableB{
@Id
@Column(name = "id")
private int id;
}
然后将每个值从A
Map到B
@PreRemove
public void insertIntoB(TableA tableA) {
TableB tableB = new TableB();
tableB.setId(tableA.getId());
tableBRepository.save(tableB);
}
当表A
和B
只有1列时,这种方法很好,但在我的情况下,我使用的是50多列,所以insertIntoB
方法将是巨大的。此外,我还必须使用这种方法维护两个Java实体,因为如果对表A
进行了更改,那么这些更改也必须反映在表B
实体中。每次向表A
添加新列后,insertIntoB
也必须更改。
我如何才能使这个解决方案更优雅?有没有办法为两个表共享一个实体对象,或者将值从A
自动Map到B
?请考虑表A
使用SequenceGenerator
,而表B
仅使用从表A
传递的id
。
2条答案
按热度按时间6tr1vspr1#
请使用Mapstruct库,它非常适合这项工作。
00jrzges2#
使用ORM,我想我会简单地使用标准的JPA
@Embedded
和@Embeddable
注解来重用某些Map,这些Map会重复出现,并且在使用两个单独的实体时对绑定有意义。然后,您可以手动Map实体(这是我个人的偏好,因为一些手动的一次性劳动没有什么错),或者使用像MapStruct这样的反射库来尝试减轻Map时的痛苦,直到它不完全符合您的期望,然后您花20分钟调试这个东西。