我正在使用JDO spring开发一个系统。我想使用mysql加入获取数据。 我的表是:
User_Login:user_id,user_name,user_password,user_role_id
User_Role:id,role
我需要的sql是:
SELECT `A0`.`USER_ID`,`B0`.`ROLE` FROM `USER_LOGIN` `A0` INNER JOIN
`USER_ROLE` `B0` ON `A0`.`USER_ROLE_ID` = `B0`.`ID` WHERE
`A0`.`USER_NAME` = ? AND `A0`.`USER_PASSWORD` = ?
我想使用注释而不是使用XML来做到这一点。 我的POJO课程是。
User.Java
@PersistenceCapable(table="User_Login")
public class User {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Column(name="user_id")
private Integer userId=0;
@Persistent
@Column(name="user_profile_name")
private String userProfileName=null;
@Persistent
@Column(name="user_email")
private String userEmail=null;
@Persistent
@Column(name="user_contact")
private String userContact=null;
@Persistent
@Column(name="user_name")
private String userName=null;
@Persistent
@Column(name="user_password")
private String userPassword=null;
@Persistent
@Column(name="user_role_id")
private Integer userRoleId=0;
@Persistent
@ManyToOne(fetch = FetchType.EAGER)
private Role userRole;
Role.java
@PersistenceCapable(table="User_Role")
public class Role {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@OneToMany(mappedBy = "user_role_id", fetch= FetchType.EAGER)
@Column(name="id")
private Integer roleId=0;
@Persistent
@Column(name="role")
private String role=null;
UserDaoImpl.java:
@Override
@Transactional
public List<User> getUser(String user_name, String user_password) {
PersistenceManager pm = this.persistenceManagerFactory.getPersistenceManager();
Transaction tx = pm.currentTransaction();
Query query = pm.newQuery(User.class);
query.setFilter("this.userName == userNameParam && this.userPassword==userPasswordParam");
query.declareParameters("String userNameParam, String userPasswordParam");
query.setResult("this.userId,this.userRole.role");
try {
// Start the transaction
tx.begin();
List<User> result = (List<User>)query.execute(user_name,user_password);
if(result.size()>0){
log.info(">>>>>00000000");
}else{
log.info("<<<<<<<=====000000");
}
// Commit the transaction, flushing the object to the datastore
tx.commit();
return result;
}
finally {
if (tx.isActive())
{
// Error occurred so rollback the transaction
tx.rollback();
}
pm.close();
}
我收到错误:
javax.jdo.JDOException: Exception thrown when executing query : SELECT
`A0`.`USER_ID`,`B0`.`ROLE` FROM `USER_LOGIN` `A0` LEFT OUTER JOIN
`USER_ROLE` `B0` ON `A0`.`USERROLE_ID_OID` = `B0`.`ID` WHERE
`A0`.`USER_NAME` = ? AND `A0`.`USER_PASSWORD` = ?
NestedThrowables:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown
column 'A0.USERROLE_ID_OID' in 'on clause'
我不知道USERROLE_ID_OID来自何处。我是JDo的新手。 请帮助!!
答案 0 :(得分:0)
@ManyToOne和@OneToMany是JPA注释,但您使用JDO注释以删除它们。
该列来自关系FK列“userRole”。如果您不想要该名称,请指定列名称。这些都记录在任何体面的JDO文档中,例如DataNucleus的文档
LEFT OUTER JOIN因为它可以为null;如果你不想在那里允许空值,那么设置注释/ XML来做那个