Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Hibernate映射-将XML转换为注释-生成了错误的列名_Spring_Hibernate_Jpa_Spring Data_Spring Data Jpa - Fatal编程技术网

Spring Hibernate映射-将XML转换为注释-生成了错误的列名

Spring Hibernate映射-将XML转换为注释-生成了错误的列名,spring,hibernate,jpa,spring-data,spring-data-jpa,Spring,Hibernate,Jpa,Spring Data,Spring Data Jpa,我在hibernate中有两个项目,一个用于XML,另一个用于注释。 当注释样式生成错误的列时,我的XML映射配置可以很好地处理复合键 注释样式生成此表 Hibernate: create table agent (agent_id number(10,0) not null, start_dttm timestamp not null, agent_cd varchar2(255 char), end_dttm timestamp, primary key (agent_id, star

我在hibernate中有两个项目,一个用于XML,另一个用于注释。 当注释样式生成错误的列时,我的XML映射配置可以很好地处理复合键

注释样式生成此表

Hibernate: create table agent (agent_id number(10,0) not null, start_dttm    timestamp not null, agent_cd varchar2(255 char), end_dttm timestamp, primary key (agent_id, start_dttm))
Hibernate: create table agent_license (agent_license_id number(10,0) not null, agent_agent_id number(10,0), agent_start_dttm timestamp, agent_id number(10,0), primary key (agent_license_id))
Hibernate: alter table agent_license add constraint FKncan0jjmt1siq0a6a19ll978m foreign key (agent_agent_id, agent_start_dttm) references agent
Hibernate: alter table agent_license add constraint FKp64d6078jnxi3hq0n0es0yhs foreign key (agent_id, agent_start_dttm) references agent
AgentLicense的一个冗余列,其代理\u代理\u id而非仅代理\u id

这在XML配置中正常工作 XML生成 列为Agent\u id、start\u dttm、Agent\u cd的Agent表 带有列Agent\u id、Agent\u start\u dttm的Agent\u许可证

代理模型

<class name="com.poc.model.Agent" table="AGENT">
    <composite-id name="id" class="com.poc.model.pk.AgentPK">
        <key-property name="agentId" type="long">
            <column name="AGENT_ID" precision="10" scale="0" />
        </key-property>
        <key-property name="startDateTime" type="timestamp">
            <column name="START_DTTM" />
        </key-property>
    </composite-id>
    <property name="agentCode" type="string">
        <column name="AGENT_CD" length="20" />
    </property>
    <set name="agentLicenses" table="AGENT_LICENSE" inverse="true" lazy="true" fetch="select">
        <key>
            <column name="AGENT_ID" precision="10" scale="0" />
            <column name="AGENT_START_DTTM" />
        </key>
        <one-to-many class="com.poc.model.AgentLicense" />
    </set>
</class>

代理许可模型

<class name="com.poc.model.AgentLicense" table="AGENT_LICENSE">
    <id name="agentLicenseId" type="long">
        <column name="AGENT_LICENSE_ID" precision="10" scale="0" />
        <generator class="assigned" />
    </id>
    <many-to-one name="agent" class="com.poc.model.Agent" fetch="select">
        <column name="AGENT_ID" precision="10" scale="0" />
        <column name="AGENT_START_DTTM" />
    </many-to-one>
    <property name="licenseNum" type="string">
        <column name="LICENSE_NUM" length="40" />
    </property>
</class>

Agent-PK模型

<class name="com.poc.model.Agent" table="AGENT">
    <composite-id name="id" class="com.poc.model.pk.AgentPK">
        <key-property name="agentId" type="long">
            <column name="AGENT_ID" precision="10" scale="0" />
        </key-property>
        <key-property name="startDateTime" type="timestamp">
            <column name="START_DTTM" />
        </key-property>
    </composite-id>
    <property name="agentCode" type="string">
        <column name="AGENT_CD" length="20" />
    </property>
    <set name="agentLicenses" table="AGENT_LICENSE" inverse="true" lazy="true" fetch="select">
        <key>
            <column name="AGENT_ID" precision="10" scale="0" />
            <column name="AGENT_START_DTTM" />
        </key>
        <one-to-many class="com.poc.model.AgentLicense" />
    </set>
</class>

这是正确的注释吗

Result table generation
Agent Table with column agent_id,start_dttm,agent_cd
Agent_License with column agent_id,agent_start_dttm

public class Agent {
@EmbeddedId
@AttributeOverrides({
    @AttributeOverride(name = "agentId", column = @Column(name = "AGENT_ID", nullable = false)),
    @AttributeOverride(name = "startDateTime", column = @Column(name = "START_DTTM", nullable = false)) })
private AgentPK agentPK;
@Column(name="AGENT_CODE")
private String agentCode;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "agent")
private Set<AgentLicense> agentLicenses = new HashSet<AgentLicense>();
}

public class AgentLicense {
@Id
@Column(name = "AGENT_LICENSE_ID", unique = true, nullable = false)
private long agentLicenseId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({ @JoinColumn(name = "AGENT_ID", referencedColumnName = "AGENT_ID"),
    @JoinColumn(name = "AGENT_START_DTTM", referencedColumnName = "START_DTTM") })
private Agent agent;
}

@Embeddable
public class AgentPK implements Serializable{
@Column(name = "AGENT_ID", nullable = false, precision = 10, scale = 0)
private long agentId;
@Column(name = "START_DTTM", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date startDateTime;
//HashCode and equals here
}
结果表生成
列为Agent\u id、start\u dttm、Agent\u cd的Agent表
带有列Agent\u id、Agent\u start\u dttm的Agent\u许可证
公共类代理{
@嵌入ID
@属性溢出({
@AttributeOverride(name=“agentId”,column=@column(name=“AGENT\u ID”,nullable=false)),
@AttributeOverride(name=“startDateTime”,column=@column(name=“START\u DTTM”,nullable=false))})
私人代理;
@列(name=“AGENT\u CODE”)
私有字符串代理代码;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“agent”)
private Set agentLicenses=new HashSet();
}
公共类代理许可{
@身份证
@列(name=“AGENT\u LICENSE\u ID”,unique=true,nullable=false)
私人长代理许可证;
@manytone(fetch=FetchType.LAZY)
@JoinColumns({@JoinColumn(name=“AGENT\u ID”,referencedColumnName=“AGENT\u ID”),
@JoinColumn(name=“AGENT\u START\u DTTM”,referencedColumnName=“START\u DTTM”)})
私人代理;
}
@可嵌入
公共类AgentPK实现可序列化{
@列(name=“AGENT\u ID”,null=false,精度=10,刻度=0)
私人长代理;
@列(name=“START\u DTTM”,null=false)
@时态(TemporalType.TIMESTAMP)
私人日期开始日期时间;
//这里是HashCode和equals
}

更正完整答案

代理

public class Agent {
  // ...
  @OneToMany(mappedBy = "agent")
  @JoinColumns( ... )
  private Set<AgentLicense> agentLicenses;
}
公共类代理{
// ...
@OneToMany(mappedBy=“代理”)
@JoinColumns(…)
私人设置代理许可证;
}

没有完全理解您的问题…更新了问题。:)