0

neo4j OGMライブラリで問題が発生しました。ライブラリドキュメント ページの指示に従って、エンティティのすべての共有フィールドと機能を含む抽象的な親エンティティを実装しました。次に、このクラスを具体的なクラスで継承して実行しようとするとsession.save、このエラー メッセージが表示されますMappingException: No identity field found for class: models.nodes.User。次に、id フィールドを親クラスから子具象クラスに引き下げようとしましたが、保存操作は成功しましたが、親クラスの他のフィールドは DB に永続化されませんでした。私の結論は、OGM は何らかの理由で親フィールドを無視するというものでした。

ここに私の親抽象クラスがあります:

abstract public class MorpheusEntity {

    // Fields

    /**
     * The ID of the entity
     */
    @JsonProperty("id")
    @GraphId
    public Long id;

    /**
     * The date of first creation of the entity
     */
    @DateString
    private Date created;

    /**
     * The date of the last modification of the entity
     */
    @DateString
    private Date modified;

    // Constructors

    public MorpheusEntity() {
        this.created = new Date();
        this.modified = new Date();
    }

    // Methods

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || id == null || getClass() != o.getClass()) return false;
        MorpheusEntity entity = (MorpheusEntity) o;
        if (!id.equals(entity.id)) return false;
        return true;
    }

    @Override
    public int hashCode() {
        return (id == null) ? -1 : id.hashCode();
    }

    // Getters / Setters

    public Long getId() {
        return id;
    }

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

    public Date getCreated() {
        return created;
    }

    public void setCreated(Date created) {
        this.created = created;
    }

    public Date getModified() {
        return modified;
    }

    public void setModified(Date modified) {
        this.modified = modified;
    }

}

そして、ここに私の具体的な子クラスがあります:

@NodeEntity
public class User extends MorpheusEntity {

    // Fields

    /**
     * Facebook ID of the user
     */
    private String facebookId;

    /**
     * First name of the user
     */
    private String firstName;

    /**
     * Last name of the user
     */
    private String lastName;

    /**
     * A URL address of the user avatar image
     */
    private String avatarURL;

    /**
     * A set of friends of the user
     */
    @Relationship(type = RelationshipNames.USER_FRIENDS, direction = Relationship.UNDIRECTED)
    private Set<User> friends;

    /**
     * A set of user connected devices
     */
    @Relationship(type = RelationshipNames.USER_DEVICES, direction = Relationship.OUTGOING)
    private Set<Device> devices;

    // Constructors

    // Methods

    // Getters / Setters

    public String getFacebookId() {
        return facebookId;
    }

    public void setFacebookId(String facebookId) {
        this.facebookId = facebookId;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getAvatarURL() {
        return avatarURL;
    }

    public void setAvatarURL(String avatarURL) {
        this.avatarURL = avatarURL;
    }

    public Set<User> getFriends() {
        return friends;
    }

    public void setFriends(Set<User> friends) {
        this.friends = friends;
    }

    public Set<Device> getDevices() {
        return devices;
    }

    public void setDevices(Set<Device> devices) {
        this.devices = devices;
    }

}

親クラスをマップされたパッケージの内側と外側の両方に配置しようとしました。<<-- 編集: これは実際には問題でした。親クラスは OGM によってマップされませんでした

必要な注釈が不足していますか? 親クラスが正しくマップされていませんか? SBTビルダーを使用して、MavenのNeo4j OGMバージョン1.1.4でPlay Framework 2.4を使用しています。

ありがとう。

4

2 に答える 2