Java MySQL DB上与外部复合密钥相关的多通Hibernate映射中存在未知错误

Java MySQL DB上与外部复合密钥相关的多通Hibernate映射中存在未知错误,java,hibernate,jpa,many-to-one,composite-primary-key,Java,Hibernate,Jpa,Many To One,Composite Primary Key,我正在尝试绘制真实的美国地图: CREATE TABLE REAL_STATES ( address VARCHAR(30) NOT NULL, admin_id VARCHAR(15) NOT NULL, real_state_type_id INT(6) NOT NULL, block VARCHAR(3) NOT NULL, internal_id INT(5) NOT NULL, PRIMARY KEY (address, block, internal_id), FOREIGN KEY

我正在尝试绘制真实的美国地图:

CREATE TABLE REAL_STATES (
address VARCHAR(30) NOT NULL,
admin_id VARCHAR(15) NOT NULL,
real_state_type_id INT(6) NOT NULL,
block VARCHAR(3) NOT NULL,
internal_id INT(5) NOT NULL,
PRIMARY KEY (address, block, internal_id),
FOREIGN KEY (real_state_type_id) REFERENCES REAL_STATE_TYPES (real_state_type_id),
FOREIGN KEY (admin_id) REFERENCES ADMINS (admin_id)
);
与居民相关的:

CREATE TABLE RESIDENTS (
resident_id VARCHAR(15) NOT NULL,
resident_name VARCHAR(20) NOT NULL,
resident_last_name VARCHAR(20) NOT NULL,
resident_phone_number VARCHAR(15) NOT NULL,
address VARCHAR(30) NOT NULL,
block VARCHAR(3) NOT NULL,
internal_id INT(5) NOT NULL,
PRIMARY KEY (resident_id),
FOREIGN KEY (address, block, internal_id) REFERENCES REAL_STATES (address, block, internal_id)
);
通过实体的真实状态:

@Entity
@Table(name = "real_states")
public class RealState implements Serializable{
    private static final long serialVersionUID = 4033627448194380926L;
    @EmbeddedId
    private RealStateID realStateID;
    @Column(name = "real_state_type_id")
    @Enumerated(EnumType.ORDINAL)
    private RealStateEnum realStateEnum;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "admin_id", insertable = true)
    private Admin admin;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumns({@JoinColumn(name="address", referencedColumnName = "address", insertable = false, updatable = false),
        @JoinColumn(name="block",referencedColumnName = "block", insertable = false, updatable = false),
        @JoinColumn(name="internal_id",referencedColumnName = "internal_id", insertable = false, updatable = false)})
    private Resident resident;
对于复合密钥的嵌入实体:

@Embeddable
public class RealStateID  implements Serializable{
    private static final long serialVersionUID = 6485406412363395170L;
    @Column(name = "address")
    private String address;
    @Column(name = "block")
    private String block;
    @Column(name = "internal_id")
    private int internal_id;
和常驻实体:

@Entity
@Table(name = "residents")
public class Resident implements Serializable {
    private static final long serialVersionUID = -9052313410222202916L;
    @Id
    @Column(name = "resident_id")
    private String resident_id;
    @Column(name = "resident_name")
    private String resident_name;
    @Column(name = "resident_last_name")
    private String resident_last_name;
    @Column(name = "resident_phone_number")
    private String resident_phone_number;
    @Column(name = "address")
    private String address;
    @Column(name = "block")
    private String block;
    @Column(name = "internal_id")
    private int internal_id;
    @OneToMany(mappedBy = "resident", fetch= FetchType.EAGER)
    private List<RealState> realStates;
@实体
@表(name=“居民”)
公共类驻留实现了可序列化{
私有静态最终长serialVersionUID=-9052313410222202916L;
@身份证
@列(name=“居民身份”)
私有字符串常驻用户id;
@列(name=“常驻者姓名”)
私有字符串名称;
@列(name=“常驻者姓氏”)
私有字符串常驻者姓氏;
@列(name=“居民电话号码”)
私人字符串居民电话号码;
@列(name=“address”)
私有字符串地址;
@列(name=“block”)
私有字符串块;
@列(name=“internal\u id”)
私用内部标识;
@OneToMany(mappedBy=“resident”,fetch=FetchType.EAGER)
私人名单国家;
对于这种特殊情况,我得到了下一个错误:

22:18:32,825 WARN  [org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl] (ServerService Thread Pool -- 79) GenerationTarget encountered exception accepting command : Error executing DDL "alter table real_states add constraint FKeggvad6claf4gvemna1xdk2tm foreign key (address, block, internal_id) references residents (address, block, internal_id)" via JDBC Statement: org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "alter table real_states add constraint FKeggvad6claf4gvemna1xdk2tm foreign key (address, block, internal_id) references residents (address, block, internal_id)" via JDBC Statement
    at org.hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
    at org.hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559)
    at org.hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:504)
    at org.hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyForeignKeys(AbstractSchemaMigrator.java:433)
    at org.hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:249)
    at org.hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114)
    at org.hibernate@5.3.20.Final//org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183)
    at org.hibernate@5.3.20.Final//org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
    at org.hibernate@5.3.20.Final//org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:310)
    at org.hibernate@5.3.20.Final//org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467)
    at org.hibernate@5.3.20.Final//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1250)
    at org.hibernate.jipijapa-hibernate5-3@23.0.1.Final//org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
    at org.jboss.as.jpa@23.0.1.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:170)
    at org.jboss.as.jpa@23.0.1.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:128)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at org.wildfly.security.elytron-private@1.15.3.Final//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:664)
    at org.jboss.as.jpa@23.0.1.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:213)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:834)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`real_state`.`#sql-3e28_118`, CONSTRAINT `FKeggvad6claf4gvemna1xdk2tm` FOREIGN KEY (`address`, `block`, `internal_id`) REFERENCES `residents` (`address`, `block`, `internal_id`))
    at com.mysql@8.0.22//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117)
    at com.mysql@8.0.22//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql@8.0.22//com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql@8.0.22//com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:764)
    at com.mysql@8.0.22//com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648)
    at org.jboss.ironjacamar.jdbcadapters@1.4.27.Final//org.jboss.jca.adapters.jdbc.WrappedStatement.execute(WrappedStatement.java:198)
    at org.hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
    ... 22 more
22:18:32825 WARN[org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl](ServerService线程池--79)GenerationTarget在接受命令时遇到异常:执行DDL“alter table real”状态添加约束FKeggvad6claf4gvemna1xdk2tm外键(地址、块、内部id)引用时出错(地址,块,内部_id)“通过JDBC语句:org.hibernate.tool.schema.spi.CommandAcceptanceException:执行DDL时出错”alter table real_states add constraint FKeggvad6claf4gvemna1xdk2tm外键(地址,块,内部_id)通过JDBC语句引用驻留(地址,块,内部_id)”
在org。hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)
在org。hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559)
在org。hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:504)
在org。hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyForeignKeys(AbstractSchemaMigrator.java:433)
在org。hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:249)
在org。hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114)
在org。hibernate@5.3.20.Final//org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183)
在org。hibernate@5.3.20.Final//org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
在org。hibernate@5.3.20.Final//org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:310)
在org。hibernate@5.3.20.Final//org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467)
在org。hibernate@5.3.20.Final//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1250)
在org.hibernate.jipijapa-hibernate5-3@23.0.1.Final//org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
在org.jboss.as。jpa@23.0.1.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:170)
在org.jboss.as。jpa@23.0.1.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:128)
位于java.base/java.security.AccessController.doPrivileged(本机方法)
在org.wildfly.security.elytron-private@1.15.3.Final//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:664)
在org.jboss.as。jpa@23.0.1.Final//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:213)
在org.jboss。threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
在org.jboss。threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
在org.jboss。threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
在org.jboss。threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
位于java.base/java.lang.Thread.run(Thread.java:834)
在org.jboss。threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)
原因:java.sql.SQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败(`real_state`.`sql-3e28_118`,约束`FKeggvad6claf4gvemna1xdk2tm`外键(`address`,block`,internal_id`)引用`residents`(`address`,block`,internal_id`)
在com。mysql@8.0.22//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117)
在com。mysql@8.0.22//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
在com。mysql@8.0.22//com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
在com。mysql@8.0.22//com.mysql.cj.jdbc.statemenimpl.executeInternal(statemenimpl.java:764)
在com。mysql@8.0.22//com.mysql.cj.jdbc.statemenimpl.execute(statemenimpl.java:648)
在org.jboss.ironjacamar。jdbcadapters@1.4.27.Final//org.jboss.jca.adapters.jdbc.WrappedStatement.execute(WrappedStatement.java:198)
在org。hibernate@5.3.20.Final//org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
…还有22个
在此之前,我遇到了一个错误,要求我实现“insert应该是false,update应该是false”,这就是我添加thos的原因