java manytoone_java – 双向ManyToOne问题

我有两个实体:Message和GeneratedMemberMessage.这里有更多的字段,而不是我在代码中显示的字段,但这些字段应足以提供我的问题的上下文.

我正在尝试做一个简单的双向OneToMany关系,从我读过的所有内容来看,这就是它要做的事情.你会注意到我正在使用复合键.

我得到以下错误和堆栈跟踪.我见过其他人在互联网上遇到过这个问题,但没有人能找到适合我的解决方案.有没有人在这看到问题?

正如ST建议的那样,我在WAS 7.0中使用openJPA 1.2.2.我正在使用RAD 7.5.4和EJB 3.0进行开发.

Message.java

@Entity

@Table(schema="dbo", name="Messages")

public class Message implements Serializable {

@Embeddable

public static class MessagePK implements Serializable {

@Column(name="SourceApplication")

String sourceApplication;

@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name="MessageId")

BigDecimal messageId;

//Getters and setters here

}

@EmbeddedId

MessagePK pk = new MessagePK();

...

@OneToMany(cascade={CascadeType.ALL}, mappedBy="message")

List generatedMemberMessages = new ArrayList();

...

}

GeneratedMemberMessage.java

@Entity

@Table(schema="dbo", name="GeneratedMemberMessages")

public class GeneratedMemberMessage implements Serializable {

@Embeddable

public static class GMMPK implements Serializable {

@Column(name="SourceApplication")

String sourceApplication;

@Column(name="MessageId")

int messageId;

@Column(name="MessageGenerationDateTime")

Date messageGenerationDateTime;

//Getters and setters here

}

...

@ManyToOne(optional = true)

@JoinColumns({

@JoinColumn(name="sourceApplication", referencedColumnName="SourceApplication"),

@JoinColumn(name="messageId", referencedColumnName="MessageId")

})

Message message;

...

}

我的EJB方法

public Message newMessage(String sourceApplication, String text, int priority, String type){

Message m = new Message(sourceApplication);

m.setMessageText(text);

m.setMessagePriority(priority);

m.setMessageType(type);

m.setSysLstUpdtUserId("me");

em.persist(m);

return m;

}

堆栈跟踪

[3/17/10 14:55:05:457 EDT] 0000001e SystemErr R javax.ejb.EJBException: See nested exception; nested exception is: <778978m-openjpa-975 fatal user error> org.apache.openjpa.persistence.ArgumentException: Field "com.bcbst.bamp.jpa.Message.generatedMemberMessages" cannot declare that it is mapped by another field. Its mapping strategy (org.apache.openjpa.jdbc.meta.strats.HandlerFieldStrategy) does not support mapping by another field.778978m-openjpa-975>

[3/17/10 14:55:05:457 EDT] 0000001e SystemErr R Caused by: <778978m-openjpa-975 fatal user error> org.apache.openjpa.persistence.ArgumentException: Field "com.bcbst.bamp.jpa.Message.generatedMemberMessages" cannot declare that it is mapped by another field. Its mapping strategy (org.apache.openjpa.jdbc.meta.strats.HandlerFieldStrategy) does not support mapping by another field.778978m-openjpa-975>

[3/17/10 14:55:05:457 EDT] 0000001e SystemErr R at org.apache.openjpa.jdbc.meta.strats.AbstractFieldStrategy.assertNotMappedBy(AbstractFieldStrategy.java:59)

[3/17/10 14:55:05:457 EDT] 0000001e SystemErr R at org.apache.openjpa.jdbc.meta.strats.HandlerFieldStrategy.map(HandlerFieldStrategy.java:71)

[3/17/10 14:55:05:457 EDT] 0000001e SystemErr R at org.apache.openjpa.jdbc.meta.FieldMapping.setStrategy(FieldMapping.java:121)

[3/17/10 14:55:05:457 EDT] 0000001e SystemErr R at org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:80)

[3/17/10 14:55:05:457 EDT] 0000001e SystemErr R at org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping(FieldMapping.java:454)

[3/17/10 14:55:05:457 EDT] 0000001e SystemErr R at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:419)

[3/17/10 14:55:05:457 EDT] 0000001e SystemErr R at org.apache.openjpa.jdbc.meta.ClassMapping.resolveNonRelationMappings(ClassMapping.java:879)

[3/17/10 14:55:05:457 EDT] 0000001e SystemErr R at org.apache.openjpa.jdbc.meta.MappingRepository.prepareMapping(MappingRepository.java:339)

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值