【问题标题】:Getting org.hibernate.id.IdentifierGenerationException for OneToMany mapping为 OneToMany 映射获取 org.hibernate.id.IdentifierGenerationException
【发布时间】:2014-12-30 06:38:55
【问题描述】:

我在尝试保存 Project 对象时遇到以下错误:

org.hibernate.id.IdentifierGenerationException: null id generated for:class com.assetproj.model.ProjectAssetType

我的课程是:

Project.java

@JsonManagedReference
private Set<ProjectAssetType> projectAssetTypes = new HashSet<ProjectAssetType>(
        0);

@OneToMany(fetch = FetchType.LAZY)
@JsonIgnore
@Cascade(CascadeType.SAVE_UPDATE)
@JoinTable(name = "tbl_project_asset_type", joinColumns = { @JoinColumn(name = "projectId") })
public Set<ProjectAssetType> getProjectAssetTypes() {
    return this.projectAssetTypes;
}

public void setProjectAssetTypes(
        Set<ProjectAssetType> projectAssetTypes) {
    this.projectAssetTypes = projectAssetTypes;
}

ProjectAssetType.java

private ProjectAssetTypeId id;
private AssetTypeMaster assetTypeMaster;
@JsonBackReference
private Project project;


@EmbeddedId
@AttributeOverrides({
        @AttributeOverride(name = "projectId", column = @Column(name = "projectId", nullable = false)),
        @AttributeOverride(name = "assetTypeId", column = @Column(name = "assetTypeId", nullable = false)) })
public ProjectAssetTypeId getId() {
    return this.id;
}

public void setId(ProjectAssetTypeId id) {
    this.id = id;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assetTypeId", nullable = false, insertable = false, updatable = false)
public AssetTypeMaster getAssetTypeMaster() {
    return this.assetTypeMaster;
}

public void setAssetTypeMaster(AssetTypeMaster assetTypeMaster) {
    this.assetTypeMaster = assetTypeMaster;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "projectId", nullable = false, insertable = false, updatable = false)
public Project getProject() {
    return this.project;
}

public void setProject(Project project) {
    this.project = project;
}

ProjectAssetTypeId.java

private long projectId;
private int assetTypeId;

public ProjectAssetTypeId() {
}

public ProjectAssetTypeId(long projectId, int assetTypeId) {
    this.projectId = projectId;
    this.assetTypeId = assetTypeId;
}

@Column(name = "projectId", nullable = false)
public long getProjectId() {
    return this.projectId;
}

public void setProjectId(long projectId) {
    this.projectId = projectId;
}

@Column(name = "assetTypeId", nullable = false)
public int getAssetTypeId() {
    return this.assetTypeId;
}

public void setAssetTypeId(int assetTypeId) {
    this.assetTypeId = assetTypeId;
}

所有的 pojo 都是由 Hibernate Tools 创建的。我的映射有什么问题吗?

【问题讨论】:

    标签: hibernate jpa jpa-2.0


    【解决方案1】:

    你没有提到@Id 的自动生成策略, 喜欢:

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    

    所以需要在 Pojo 中显式设置 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多