Patrick Linskey schrieb:
Hi,
Can you post the domain model that's causing the problems? Does the
superclass use the same access type as the subclasses?
ok here is an example of a class which gets this error
@Entity
public class Session implements BaseEntity {
public static final int SESS_STATE_PREREGISTERED = 0;
public static final int SESS_STATE_APPROVED = 1;
public static final int SESS_STATE_REJECTED = 2;
@Transient
private Map<String,SessionMessages> messages;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "session")
Set<SessionMessages> sessionmessages = new HashSet<SessionMessages>();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
String conferenceabbr = null;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne(optional = true)
@JoinColumn(name = "SESSIONGROUP_UID", nullable = true)
SessionGroup sessiongroup;
private Integer sessionstate = SESS_STATE_PREREGISTERED;
@ManyToMany(mappedBy = "speakersessions", fetch = FetchType.LAZY,
cascade = CascadeType.PERSIST)
private Set<SpeakerData> speakers = new HashSet<SpeakerData>();
@Temporal(TemporalType.DATE)
private Date day;
@Temporal(TemporalType.TIME)
private Date starttime;
@Temporal(TemporalType.TIME)
private Date endtime;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Room room;
private Long orderattr;
public Set<SpeakerData> getSpeakers() {
return speakers;
}
public void setSpeakers(Set<SpeakerData> speakers) {
this.speakers = speakers;
}
public SessionGroup getSessiongroup() {
return sessiongroup;
}
public void setSessiongroup(SessionGroup sessiongroup) {
this.sessiongroup = sessiongroup;
}
public Date getDay() {
return day;
}
public void setDay(Date day) {
this.day = day;
}
public Date getStarttime() {
return starttime;
}
public void setStarttime(Date starttime) {
this.starttime = starttime;
}
public Date getEndtime() {
return endtime;
}
public void setEndtime(Date endtime) {
this.endtime = endtime;
}
public Integer getSessionstate() {
return sessionstate;
}
public void setSessionstate(Integer sessionstate) {
this.sessionstate = sessionstate;
}
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
public Long getOrderattr() {
return orderattr;
}
public void setOrderattr(Long orderattr) {
this.orderattr = orderattr;
}
public String getConferenceabbr() {
return conferenceabbr;
}
public void setConferenceabbr(String conferenceabbr) {
this.conferenceabbr = conferenceabbr;
}
public Map<String, SessionMessages> getMessages() {
if (messages == null ) {
Map<String, SessionMessages> mmap = new HashMap();
if (getId() != null) {
Collection<SessionMessages> messages =
getSessionmessages();
Iterator<SessionMessages> miter = messages.iterator();
while(miter.hasNext()) {
SessionMessages message = miter.next();
mmap.put(message.getLanguage().getLangID(),message);
}
}
//create missing messages
LanguageBean languageBean = (LanguageBean)
ConferenceUtil.getManagedBean("language");
Iterator<Language> langiter =
languageBean.getLanguages().iterator();
while(langiter.hasNext()) {
Language currentlang = langiter.next();
if (mmap.get(currentlang.getLangID()) == null) {
SessionMessages message = new SessionMessages();
message.setLanguage(currentlang);
message.setSession(this);
mmap.put(currentlang.getLangID(),message);
}
}
setMessages(mmap);
}
return messages;
}
public void setMessages(Map<String, SessionMessages> messages) {
this.messages = messages;
}
@Transient
@PrePersist
public void prepersist() {
if(StringUtils.isBlank(conferenceabbr))
conferenceabbr = ((ApplicationController)
JSFUtils.getManagedBean("applicationcontroller")).getConfabbr();
Map<String, SessionMessages> msgs = getMessages();
Iterator<SessionMessages> iter = msgs.values().iterator();
HashSet<SessionMessages> set = new HashSet<SessionMessages>();
while(iter.hasNext()) {
set.add(iter.next());
}
setSessionmessages(set);
if (orderattr == null) {
setOrderattr(100L);
}
}
@Transient
@PreUpdate
public void preupdate() {
prepersist();
}
public Set<SessionMessages> getSessionmessages() {
return sessionmessages;
}
public void setSessionmessages(Set<SessionMessages> sessionmessages) {
this.sessionmessages = sessionmessages;
}
}
With the Base Entity being
public interface BaseEntity {
public String getConferenceabbr();
public void setConferenceabbr(String conferenceabbr);
public Long getId();
}
If you need the model schema I will make a diagram...
Thanks for your fast response
Werner
-Patrick
On Jan 22, 2008 12:56 AM, Werner Punz <[EMAIL PROTECTED]> wrote:
Hi I tried to move a project over to openjpa yesterday
I get the message that my entities mix annotations on properties
and methods.
The main problem is, that
I have all my annotations set on the properties themselves
but I have a @PrePersist annotation set on a trigger method
which does some prepersist application logic!
All other annotations are directly on the instance variables
which define the properties! No other one is on any method!
JPA and Hibernate Annotations takes my entities as given and do not
choke on them, OpenJPA does.
This seems like a bug to me, am I right?
Version of openjpa, current stable version!
Werner