使用Play!框架和它的JPASupport类我遇到了遗留数据库的问题。
我有以下课程:
@Entity
@Table(name="product_catalog")
public class ProductCatalog extends JPASupport {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer product_catalog;
@OneToOne
@JoinColumn(name="upper_catalog")
public ProductCatalog upper_catalog;
public String name;
}
某些产品目录没有上层目录,在旧数据库中引用为0。如果我将upper_catalog提供为NULL,那么期望JPA将NULL值插入该数据库列。 在写入数据库时如何强制空值为0,而从数据库读取时又是如此?
答案 0 :(得分:2)
我没有看到直接用JPA实现你想要的任何简单方法(即使你找到一种方法可以使用基本操作,如保存或加载,它也很有可能更复杂用例,如复杂条件/ hql,无标准获取模式等)
所以我会这样做:
@Entity
@Table(name="product_catalog")
public class ProductCatalog extends JPASupport {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer product_catalog;
@Column(name="upper_catalog")
public Long upper_catalog_id;
public String name;
public ProductCatalog getUpperCatalog() {
if (upper_catalog_id == 0)
return null;
return ProductCatalog.findById(upper_catalog_id);
}
public void setUpperCatalog(ProductCatalog pc) {
if (pc == null) {
upper_catalog_id = 0;
}
else {
if (pc.id == null) {
// option 1. a bit like a cascade
pc.save();
// option 2. if you consider passing a transient entity is not valid
throw new RuntimeException("transient entity " + pc.toString());
}
upper_catalog_id = pc.id;
}
}
}
答案 1 :(得分:0)
我看到两个选项:
Id
(即int
代替Integer
)CustomType
进行转换