作者daden (出门去睡觉)
看板java
标题[问题] 关於 reflection 问题
时间Tue Nov 15 16:00:42 2016
各位前辈好
小弟目前有个问题,目前我有一个作法是想自动产生 HQL 的语法
但是卡在 reflection 的作法,所以想上来请教一下大家,
请问要如何将 id 部份的 fields 和 values 取出
这部份不太知道要如何做,请前辈们帮解题一下,谢谢
以下为程式码
User.java
---------------------------------------------------------
@Entity
@Table(name = "user")
public class User implements Serializable {
@EmbeddedId
UserId id;
@NotEmpty
@Column(name = "user_name", nullable = false)
private String userName;
@NotEmpty
@Column(name = "password", nullable = false)
private String password;
@Column(name = "status")
private String status;
@Column(name = "email", nullable = false)
private String email;
@NotEmpty
@Column(name = "registerTime", nullable = false)
private String registerTime;
@NotEmpty
@Column(name = "lastActiveTime", nullable = false)
private String lastActiveTime;
.......getters setters
============================================================
UserId.java
------------------------------------------------------------
@Embeddable
public class UserId implements Serializable {
@Column(name = "user_Id")
public Integer userId;
@Column(name = "account")
public String account;
.......getters setters
=============================================================
Test.java
-------------------------------------------------------------
public class Test {
public static void main(String[] args) throws Exception {
User user = new User();
UserId id = new UserId();
user.setEmail("weqqr");
user.setStatus("2");
user.setPassword("eeeeee");
id.setAccount("wwwwwerrr");
id.setUserId(2244);
user.setId(id);
Test test = new Test();
System.out.println(test.genUpdateHql(user, null, null));
}
private String genUpdateHql(Object entity, Map<String, Object> argMap,
String condition) throws Exception {
BeanInfo beanInfo = Introspector.getBeanInfo(entity.getClass());
PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
String entityName = entity.getClass().getSimpleName();
StringBuilder hqlStr = new StringBuilder();
hqlStr.append("UPDATE " + entityName + " " + entityName + " SET ");
for (int i = 0; i < descriptors.length; i++) {
String propName = descriptors[i].getName();
Class<?> propType = descriptors[i].getPropertyType();
Object value = PropertyUtils.getProperty(entity, propName);
if (!propName.equals("class") && null != value) {
if (propType.getSimpleName().equals("Integer") ||
propType.getSimpleName().equals("int")) {
hqlStr.append(entityName + "." + propName + "=" + value + "");
} else if (propType.getSimpleName().equals("String")) {
hqlStr.append(entityName + "." + propName + "=" + "'" + value + "'");
} else if (propName.equals("id")) {
}
hqlStr.append(",");
}
}
hqlStr = hqlStr.deleteCharAt(hqlStr.length() - 1);
hqlStr = hqlStr.append(" WHERE User.id.userId=:userId AND
User.id.account=:account");
return hqlStr.toString();
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.218.51.133
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1479196850.A.57B.html
1F:→ ssccg: propType是个class,再对这个class做一次一样的事啊 11/15 17:21
2F:→ daden: 已经解决了,感恩 11/15 18:02
3F:→ adrianshum: 这类事用criteria api 会简单很多吧 11/16 11:08