gpt4 book ai didi

java - EclipseLink 层次结构错误

转载 作者:行者123 更新时间:2023-12-02 07:12:36 24 4
gpt4 key购买 nike

我正在尝试与 Virgo 和 EclipseLink 合作并实现一个基于 Greenpage 项目的应用程序。

我已经实现了一个层次结构,但出现了一个奇怪的错误(使用 EclipseLink):

Internal Exception: Exception [EclipseLink-7161] (Eclipse Persistence Services - 2.0.0.v20091127-r5931): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Entity class [class model.Person] has no primary key specified. It should define either an @Id, @EmbeddedId or an @IdClass. If you have defined PK using any of these annotations then make sure that you do not have mixed access-type (both fields and properties annotated) in your entity class hierarchy.

层次结构:

Entity <- NamedEntity <- Person <- ... - 扩展 Person 的其他类

import java.io.Serializable;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

@MappedSuperclass
public abstract class Entity implements Serializable {

private static final long serialVersionUID = 1L;

private Long id;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}

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


import javax.persistence.MappedSuperclass;

@MappedSuperclass
public abstract class NamedEntity extends Entity {
private static final long serialVersionUID = 1L;

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return name;
}
}



import javax.persistence.DiscriminatorColumn;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

import pl.com.mgr.model.NamedEntity;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "discriminator")
public abstract class Person extends NamedEntity {
private static final long serialVersionUID = 1L;

}

编辑:Kevin Bowersox 发布的答案(非常感谢!)有帮助......部分;)。问题变得更深了。我们现在是:Entity <- NamedEntity <- Attribute <- LecturerAttribute

import javax.persistence.Column;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;

import model.NamedEntity;

@MappedSuperclass
public abstract class Attribute<T extends NamedEntity> extends NamedEntity {
private static final long serialVersionUID = 1L;

private T entity;
private String value;

@ManyToOne
@JoinColumn(name = "entity", nullable = false)
public T getEntity() {
return entity;
}

public void setEntity(T entity) {
this.entity = entity;
}

@Column(nullable = false)
public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}


}




import javax.persistence.Entity;

@Entity
public class LecturerAttribute extends Attribute<Lecturer> {
private static final long serialVersionUID = 1L;

}

异常(exception)情况:

Internal Exception: Exception [EclipseLink-7161] (Eclipse Persistence Services - 2.0.0.v20091127-r5931): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Entity class [class model.LecturerAttribute] has no primary key specified. It should define either an @Id, @EmbeddedId or an @IdClass. If you have defined PK using any of these annotations then make sure that you do not have mixed access-type (both fields and properties annotated) in your entity class hierarchy.

最佳答案

将注释从访问器移至字段声明,并将字段可访问性更改为 protected 。

@MappedSuperclass
public abstract class Entity implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
protected Long id;

public Long getId() {
return id;
}

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

关于java - EclipseLink 层次结构错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15325965/

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