Spring Boot和JPA覆盖映射实体名称/标识符

huangapple go评论93阅读模式
英文:

Spring boot and JPA override mapped entity name/id

问题

以下是翻译后的内容:

我有一些混合了嵌入属性的实体。我已经能够通过使用 @AttributeOverrides@AttributeOverride 来覆盖嵌入列名,但似乎对于嵌套实体无效。

请参考以下代码:

  1. @Entity
  2. @Table(name = "branch")
  3. public class Branch {
  4. @Id
  5. @GeneratedValue(strategy = GenerationType.IDENTITY)
  6. private Long id;
  7. private String name;
  8. private String phoneNumber;
  9. private String email;
  10. @Embedded
  11. @AttributeOverrides({
  12. @AttributeOverride(name = "streeNumber", column = @Column(name = "branch_street_number")),
  13. @AttributeOverride(name = "streetName", column = @Column(name = "branch_street_name")),
  14. @AttributeOverride(name = "lga", column = @Column(name = "branch_lga_id")),
  15. @AttributeOverride(name = "city", column = @Column(name = "branch_city"))
  16. })
  17. private Location location;
  18. }

Location 实体:

  1. @Embeddable
  2. public class Location {
  3. private String streetNumber;
  4. private String streetName;
  5. @ManyToOne
  6. @JoinColumn(referencedColumnName = "id", nullable = false)
  7. private LocalGovernmentArea lga;
  8. private String city;
  9. }

然而,lga 列仍然会生成为 lga_id 而不是 branch_lga_id

是否有解决这个问题的方法呢?

谢谢。

英文:

I have a couple of entities mixed with Embedded attributes. I've been able to override embedded column names using @AttributeOverrides and @AttributeOverride but it doesn't seem to work for nested entities.

see below:

  1. @Entity
  2. @Table(name = "branch")
  3. public class Branch {
  4. @Id
  5. @GeneratedValue(strategy = GenerationType.IDENTITY)
  6. private Long id;
  7. private String name;
  8. private String phoneNumber;
  9. private String email;
  10. @Embedded
  11. @AttributeOverrides({
  12. @AttributeOverride( name = "streeNumber", column = @Column(name = "branch_street_number")),
  13. @AttributeOverride( name = "streetName", column = @Column(name = "branch_street_name")),
  14. @AttributeOverride( name = "lga", column = @Column(name = "branch_lga_id")),
  15. @AttributeOverride( name = "city", column = @Column(name = "branch_city"))
  16. })
  17. private Location location;

Location entity:

  1. @Embeddable
  2. public class Location {
  3. private String streetNumber;
  4. private String streetName;
  5. @ManyToOne
  6. @JoinColumn(referencedColumnName = "id", nullable = false)
  7. private LocalGovernmentArea lga;
  8. private String city;

the lga column still generates as lga_id instead of branch_lga_id

Is there any solution to this?

Thank you.

答案1

得分: 0

找到一个解决办法。我可以使用 @AssociationOverrides 来重写实体名称。

  1. @Embedded
  2. @AttributeOverrides({
  3. @AttributeOverride(name = "streetNumber", column = @Column(name = "branch_street_number")),
  4. @AttributeOverride(name = "streetName", column = @Column(name = "branch_street_name")),
  5. @AttributeOverride(name = "lga", column = @Column(name = "branch_lga_id")),
  6. @AttributeOverride(name = "city", column = @Column(name = "branch_city"))
  7. })
  8. @AssociationOverrides({
  9. @AssociationOverride(
  10. name = "lga", joinColumns = @JoinColumn(name = "branch_lga_id"))
  11. })
  12. private Location location;

这就可以达到效果了!

英文:

Found a solution. I can override the entity name using @AssociationOverrides

  1. @Embedded
  2. @AttributeOverrides({
  3. @AttributeOverride( name = "streetNumber", column = @Column(name = "branch_street_number")),
  4. @AttributeOverride( name = "streetName", column = @Column(name = "branch_street_name")),
  5. @AttributeOverride( name = "lga", column = @Column(name = "branch_lga_id")),
  6. @AttributeOverride( name = "city", column = @Column(name = "branch_city"))
  7. })
  8. @AssociationOverrides({
  9. @AssociationOverride(
  10. name = "lga", joinColumns = @JoinColumn(name = "branch_lga_id"))
  11. })
  12. private Location location;

That does the trick!

huangapple
  • 本文由 发表于 2020年9月8日 21:47:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/63795290.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定