Java 休眠@AttributeOverride和@ColumnTransformer
我正在学习Hibernate/JPA,并对其进行一些练习。所以我的任务是映射这个实体:Java 休眠@AttributeOverride和@ColumnTransformer,java,hibernate,jpa,hibernate-mapping,Java,Hibernate,Jpa,Hibernate Mapping,我正在学习Hibernate/JPA,并对其进行一些练习。所以我的任务是映射这个实体: @Entity public class Item { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Embedded @AttributeOverride(name = "priceInUSD", column = @Column(name = "start_pri
@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Embedded
@AttributeOverride(name = "priceInUSD", column = @Column(name = "start_price_in_uah"))
private Price startPrice;
@Embedded
@AttributeOverride(name = "priceInUSD", column = @Column(name = "end_price_in_uah"))
private Price endPrice;
}
这是我的可嵌入类:
@Embeddable
public class Price {
@Column(name = "price_in_uah")
@org.hibernate.annotations.ColumnTransformer(
read = "{dont_know_what_to_put_here} * 0.039",
write = "? / 0.039")
private int priceInUSD;
}
在我的DB中,我将价格存储在UAH中,在我的Java代码中,我将价格存储在USD中。
我知道这是一个有点愚蠢的例子,但仍然
问题是当我使用hibernate的@ColumnTransformer
时,我必须在read
属性中指定列名(如“price_in_uah*0.039”),但由于@AttributeOverride
注释,列
名字可以改变
所以,我可以用什么来代替
{don_know__放什么在这里}
标签?因为汇率随时间变化,强烈建议不同的解决方案。很难修复实体中的DB设计问题(我也很惊讶'int')顺便说一句,正式建议(可能在下一个项目中)最大限度地使用可移植JPA是的,我应该尝试另一种解决方案。我很好奇你是否可以指定列名。使用“int”来存储“money”是我朋友的建议。是的,将其乘以“0.039”看起来很奇怪。但这不是一个真正的项目。我只是在尝试hibernate的“@ColumnTransformer”功能,因为汇率随时间变化,强烈建议采用不同的解决方案。很难修复实体中的DB设计问题(我也很惊讶'int')顺便说一句,正式建议(可能在下一个项目中)最大限度地使用可移植JPA是的,我应该尝试另一种解决方案。我很好奇你是否可以指定列名。使用“int”来存储“money”是我朋友的建议。是的,将其乘以“0.039”看起来很奇怪。但这不是一个真正的项目。我只是在尝试hibernate的“@ColumnTransformer”功能