В классе без свойства с именем "type" я получаю org.hibernate.PropertyNotFoundException: не удалось найти установщик для типа свойства в классе - PullRequest
0 голосов
/ 31 июля 2009

Используя JPA и Hibernate в качестве поставщика, у меня есть класс, определенный как:

@Entity
@Table(name="partyrole")
public class PartyRole extends BaseDateRangeModel {
  private static final long serialVersionUID = 1L;
  private Party roleFor;

  public void setRoleFor(Party roleFor) {
    this.roleFor = roleFor;
  }

  @ManyToOne
  public Party getRoleFor() {
    return roleFor;
  }
}

И я получаю ошибку в заголовке вопроса. Я пытался добавить public void setType(Object type), но это тоже не работает. Файл persistence.xml нормальный. Есть два класса, которые ссылаются на этот класс, но ни один из них не пытается вызвать setType. Буду признателен за любую помощь !!!! Это происходит во время развертывания. Трассировка стека находится внизу.

Родительский класс:

package com.nsfw.bmp.common.jpa;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotNull;

/**
 * Several models are date range sensitive, this base class provides that basic
 * functionality.
 * 
 * @author jim
 * 
 */
@MappedSuperclass
public abstract class BaseDateRangeModel extends BasePersistentModel {
private static final long serialVersionUID = 1L;
private Date from;
private Date thru;

/**
 * Determines if a model is active. A model is active if now is after or
 * equal to from , and thru is either null, or after now, or equal to now.
 */
@Transient
public boolean isActive() {
    Date now = new Date();
    boolean afterFrom = from.before(now) || from.equals(now);
    boolean beforeThru = thru == null || thru.after(now)
            || thru.equals(now);
    return afterFrom && beforeThru;
}

@AssertTrue(message = "Dates are not valid the thru date must be empty, or after the fromdate.")
public boolean areDatesValid() {
    if (thru == null) {
        return true;
    } else {
        return thru.after(from);
    }
}


@Temporal(TemporalType.TIMESTAMP)
@NotNull
@Column(name = "fromDate")
public Date getFrom() {
    return from;
}

public void setFrom(Date from) {
    this.from = from;
}

@Temporal(TemporalType.TIMESTAMP)
public Date getThru() {
    return thru;
}

public void setThru(Date thru) {
    this.thru = thru;
}

}

Его родитель:

package com.nsfw.bmp.common.jpa;

import java.io.Serializable;

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

@MappedSuperclass
public abstract class BasePersistentModel implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;

protected Long id;

protected Long version = 0l;

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    BasePersistentModel other = (BasePersistentModel) obj;
    if (id == null) {
        if (other.id != null)
            return false;
    } else if (!id.equals(other.id))
        return false;
    if (version == null) {
        if (other.version != null)
            return false;
    } else if (!version.equals(other.version))
        return false;
    return true;
}

@Id
@GeneratedValue
public Long getId() {
    return id;
}

@Version
public Long getVersion() {
    return version;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    result = prime * result + ((version == null) ? 0 : version.hashCode());
    return result;
}

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

public void setVersion(Long version) {
    this.version = version;
}

}

Класс Party довольно большой, с большим количеством отображений. Это тот, который просили:

/**
 * @return the actingAs
 */
@OneToMany(mappedBy="roleFor", targetEntity=com.nsfw.bmp.party.entity.association.PartyRole.class)
@OrderBy("from")
public List<PartyRole> getActingAs() {
    return actingAs;
}

Вот трассировка стека:

Caused by: org.hibernate.PropertyNotFoundException: Could not find a setter for property type in class com.nsfw.bmp.party.entity.association.PartyRole
at org.hibernate.property.BasicPropertyAccessor.createSetter(BasicPropertyAccessor.java:240)
at org.hibernate.property.BasicPropertyAccessor.getSetter(BasicPropertyAccessor.java:233)
at org.hibernate.mapping.Property.getSetter(Property.java:299)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertySetter(PojoEntityTuplizer.java:272)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:149)
at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:76)
at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:325)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:457)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:131)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:261)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)

Ответы [ 3 ]

0 голосов
/ 31 июля 2009

Можете ли вы опубликовать свой класс вечеринки? У меня есть подозрение, что это связано с вашим многоканальным отображением. Есть ли столбец типа в таблице partyRole?

0 голосов
/ 01 августа 2009

Если вы получаете это во время запуска, это означает, что у вас есть класс, который ссылается на PartyRole через обратную связь, например что-то вроде

@OneToMany(targetEntity=PartyRole.class, inverse=true")

в какой-то другой сущности. Установите уровень ведения журнала гибернации на DEBUG - это должно помочь вам сузить проблему.

0 голосов
/ 31 июля 2009

Ваша проблема может быть связана с классом BaseDateRangeModel, поскольку PartyRole расширяет его.Вы можете показать нам этот класс?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...