gpt4 book ai didi

java - JPA 多对多连接表实体与复合键 "null id generated "

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:23 26 4
gpt4 key购买 nike

这是我的实体:

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", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, 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", insertable = false, 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);

我在我的日志中得到了这个引起:org.hibernate.id.IdentifierGenerationException:为类 com.dhl.dcc.domain.IntegrationAccount 生成空 ID

我对这种映射了解不多,能否请您告诉我如何改进这种映射(必须保留连接表的实体)以及如何使用相关集成保存帐户?谢谢。

最佳答案

我知道这个问题已经被标记为已解决,但我不同意接受的答案。此答案通过在表 INT_ACCOUNTS 中添加一个无用的列(新 ID)来修改数据模型。在不修改数据模型的情况下,还有另一种在 Hibernate 中解决此问题的方法:

@Entity
@Table(name = "INT_ACCOUNTS")
public class IntegrationAccount implements Serializable {

@Id
@ManyToOne
@JoinColumn(name = "INT_ID_FK")
private Integration integration;

@Id
@ManyToOne
@JoinColumn(name = "ACC_ID_FK")
private Account account;
}

@Entity
@Table(name = "INTEGRATIONS")
public class Integration {

@Id
@SequenceGenerator(name = "integrationSequence", sequenceName = "SQ_INTEGRATIONS", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "integrationSequence")
@Column(name = "INT_ID")
private Long id;
}

@Entity
@Table(name = "ACCOUNTS")
public class Account {

@Id
@SequenceGenerator(name = "accountSequence", sequenceName = "SQ_ACCOUNTS", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "accountSequence")
@Column(name = "ACC_ID")
private Long id;
}

关于java - JPA 多对多连接表实体与复合键 "null id generated ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15023021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com