我有应用程序,它将解析的URL存储在MySQL数据库中并填充解析的句子,然后使用级联解析单词等(所以我只保存URL,db自动插入休息)。
在ProcessedUrl POJO中我有字段:
Long id
String url
Date date
Set<Sentence> sentences
现在PK是以本机方式生成的id。我希望实现类似的功能 - 当用户输入一些已经解析并存储到db中的url时,它不会被再次/重复解析。
使用hbm.xml
映射实现此目的的合适方法是什么?
编辑:
ProcessedUrl POJO:
public class ProcessedUrl {
private long id;
private String url;
private Date date;
private Set<Sentence> sentences;
public ProcessedUrl() {
}
public ProcessedUrl(String url, Date date) {
this.setUrl(url);
this.setDate(date);
}
public ProcessedUrl(String url, Date date, Set<Sentence> sentences) {
this.setUrl(url);
this.setDate(date);
this.setSentences(sentences);
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Set<Sentence> getSentences() {
return this.sentences;
}
public void setSentences(Set<Sentence> sentences) {
this.sentences = sentences;
}
@Override
public boolean equals(Object obj) {
if(this == obj) return true;
if(!(obj instanceof ProcessedUrl)) return false;
ProcessedUrl that = (ProcessedUrl) obj;
EqualsBuilder eb = new EqualsBuilder();
eb.append(this.getUrl(), that.getUrl());
return eb.isEquals();
}
@Override
public int hashCode() {
HashCodeBuilder hcb = new HashCodeBuilder();
hcb.append(url);
return hcb.toHashCode();
}
}
ProcessedUrl.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="model">
<class name="ProcessedUrl">
<id name="id">
<column name="url_id" />
<generator class="native"/>
</id>
<property name="url" type="text"/>
<property name="date" type="java.util.Date" />
<set name="sentences" cascade="all" >
<key column="PROCESSED_URL_ID" />
<one-to-many class="model.Sentence" />
</set>
</class>
</hibernate-mapping>
答案 0 :(得分:0)
当用户输入一些已经解析并存储到db中的url时, 它不会被再次/重复解析。什么是合适的实现方式 这使用hbm.xml映射?
您无法通过简单的hbm映射执行此操作,因为先前已解析的URL已存储在数据库中,您需要验证数据库中是否已存在最新收到的URL值。
因此,要实现这一目标,您需要按照以下步骤操作:
(1)从App获取URL(不要在此处)
(2)检查数据库中是否存在URL
(3)如果URL不存在,请现在将URL保存并保存到数据库
(4)如果URL已存在,请记录警告/错误或忽略请求