我试图用getter方法而不是字段来强制hibernate使用setter,但没有成功
我试图在字段上使用@access(accesstype.property)
,但不起作用
如何强制hibernate调用setter方法填充类字段?
@Entity
public class User {
@Transient
private ApiUser tempUser = new ApiUser ();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Access(AccessType.PROPERTY)
@Column(nullable = false)
private String name;
@Access(AccessType.PROPERTY)
@Column(nullable = false, unique = true)
private String username;
@Access(AccessType.PROPERTY)
@Column(nullable = false)
private String userId;
//lots of others fields//
public void setUsername(String username) {
this.username = username;
this.tempUser.setUsername(username);
}
public void setUserId(String userId) {
this.userId = userId;
this.tempUser.setId(Long.parseLong(userId));
}
默认情况下,访问类型由放置标识符注释(@id)的位置定义。如果把它放在字段上,它将是accesstype.field,如果把它放在getter上,它将是accesstype.property。
有时,您可能不想注释字段,而是要注释属性(例如,因为您希望在getter中有一些任意的逻辑,或者因为您喜欢这样做。)在这种情况下,必须定义getter并将其注释为accesstype.property。
据我所知,如果在任何实体字段/方法上指定AccesStype.Field或AccesStype.Property,则必须为整个类指定默认行为。这就是为什么您需要在类级别上使用AccesStype.Field(尽管AccesStype.Field是默认值)
现在,如果phnnumber字段中没有@transistany,JPA将为您提供一个3列的表:
id,phnnumber,getphnnumber。这是因为它将对所有实体字段(id和phnnumber)使用accesstype.field,同时,它将对getter(getPhnnumber())使用accesstype.property。您将以在数据库中映射两次的电话号码结束。
因此,@transient注释是必需的-这意味着实体不会将字段的值存储在底层存储中,而是将getter返回的值存储在底层存储中。
问题内容: 下面的代码在运行时显然会打印出“ B1 / A2 / B2”。现在,是否可以改为打印“ A1 / A2 / B2”(即A#method2()应该在A而不是B上调用method1())? 注意:我不需要获得传递多态性,这个问题仅出于好奇。 问题答案: 是的,您可以做到。在包 a中 定义A : 在包 b中 定义B : 将测试放入软件包 a中 并运行它。结果是A1 / A2 / B2。当然这
问题内容: 我想在调用构造函数时强制用户填写可选参数: 当前,以下代码有效: 我想防止它。我想到了这一点: 不是一个选择,因为我需要使用逗号分隔的args的能力。 有什么好的解决方案可以做到这一点吗?请不要说varargs参数必须是可选的。问题不在于此。 问题答案: 也许下面是一个额外的默认构造函数?
我正在使用作为覆盖层。它应该和它的父容器一样宽和一样高。然而,由于某种奇怪的原因,它不是垂直填充其父级的(而是水平填充)。下面是相关的XML: 使用上面的代码,覆盖层也不可见(其高度为)。当我在内部放置时,它会展开以适应。简而言之,它的行为就好像它的高度被设置为。 我如何强制它装满它的容器,同时让它空着?
这里有一个关于我要做的事情的参考...访问JavaFX TableView ObservableRayList中的子类属性 但是仅仅使用示例代码,我基本上重写了2个方法,每个3次...在实际的程序中还有更多的东西。(再多一点点)
你知道我如何使用FireStore填充文档上的引用字段吗?
问题内容: 我有一个WebMethod,它获取要在DataSet中填充DropDown的数据。目前,我正在使用硬编码对象填充下拉列表。但是我想用webmethod返回的数据替换这个硬编码的对象。 客户端(更新1): 问题答案: