java – JPA多对多连接表实体,复合键“null id generated”
发布时间:2020-12-14 06:00:14 所属栏目:Java 来源:网络整理
导读:这是我的实体: public class Account extends AbstractEntityLong { @Id @SequenceGenerator(name = "accountSequence",sequenceName = "SQ_ACCOUNTS",allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "accountSequen
这是我的实体:
public class Account extends AbstractEntity<Long> { @Id @SequenceGenerator(name = "accountSequence",sequenceName = "SQ_ACCOUNTS",allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "accountSequence") @Column(name = "ACC_ID",nullable = false) private Long id; ... } public class Integration extends AbstractEntity<Long> { @Id @SequenceGenerator(name = "integrationSequence",sequenceName="SQ_INTEGRATIONS",generator = "integrationSequence") @Column(name = "INT_ID",nullable = false) private Long id; ... public void addIntegration(Integration integration) { IntegrationAccount association = new IntegrationAccount(); // This does not help //association.setIntAccountsPK(new IntAccountsPK(integration.getId(),this.getId())); association.setAccount(this); association.setIntegration(integration); this.integrationAccounts.add(association); integration.getIntAccountsCollection().add(association); } } 这是连接表的实体 @Entity @Table(name = "INT_ACCOUNTS") public class IntegrationAccount { @EmbeddedId protected IntAccountsPK intAccountsPK; @JoinColumn(name = "ACC_ID",referencedColumnName = "ACC_ID",insertable = false,updatable = false) @ManyToOne private Account account; @JoinColumn(name = "INT_ID",referencedColumnName = "INT_ID",updatable = false) @ManyToOne private Integration integration; ... } @Embeddable public class IntAccountsPK implements Serializable { @Column(name = "INT_ID",nullable = false) private Long intId; @Column(name = "ACC_ID",nullable = false) private Long accId; ... } 当我这样做时: account.addIntegrations(integrations.getTarget()); account.setCustomer(customer); accountService.save(account); 我在日志中得到了这个 我对这种映射没有太多的了解,请你告诉我如何改进这种映射(必须保留连接表的实体)以及如何使用相关的集成来保存帐户?谢谢. 解决方法
您可以为IntegrationAccount创建ID字段,然后为两个字段创建唯一约束.
@Entity @Table(name = "INT_ACCOUNTS",uniqueConstraints=@UniqueConstraint(columnNames={"ACC_ID","INT_ID"})) public class IntegrationAccount { @Id private Long id; @JoinColumn(name = "ACC_ID",updatable = false) @ManyToOne private Integration integration; ... } 奇迹般有效! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 使用MatOfKeyPoint和feature2d检测的Android OpenC
- Java中的泛型(和通配符)
- java – 自动在’System.out.println()’语句中显示日期
- 多线程 – x86保留EFLAGS位1 == 0:这怎么可能发生?
- 难以置信的小十进制的最佳Java对象
- java – 找不到Oracle jdbc驱动程序
- Java基础101 Struts2下的 jquery+ajax+struts 技术实现异步
- java-通过scala.sys.process API在spark-scala中执行外部命
- java中pdf转图片的实现方法
- Java中的日期和时间类以及Calendar类用法详解