是否可以在映射到同一列的同一实体上保持同步两个属性(使用基本JPA或hibernate)?
我有两个属性:
@JoinColumn(referencedColumnName = "id", insertable = false, name = "parent", updatable = false)
@ManyToOne(fetch = FetchType.LAZY)
private Person parent;
@Column(name = "parent")
private Integer parentId;
基本上,我想要以下内容:
System.out.println(element.getParentId());
System.out.println(element.getParent().getId());
element.setParentId(2);
System.out.println(element.getParentId());
System.out.println(element.getParent().getId());
这是打印“3,3,2,2”而不是“3,3,2,3”。
是否可以(不在getParent()getter上编写自定义延迟加载?)
提前谢谢
答案 0 :(得分:2)
第一个解决方案是先保存实体,然后使用实体管理器进行刷新。
element.setParentId(2);
entityManager.merge(element);
entityManager.refresh(element);
刷新将使它再次从数据库中获取对象,并且它将具有正确的值。
我做的第二个选项是更改实体的setter以维持状态。类似的东西:
public void setParent(Parent parent) {
this.parent = parent;
parentId = parent.id;
}
答案 1 :(得分:0)
试试这个
@JoinColumn(referencedColumnName = "id", insertable = false, name = "parent")
@ManyToOne(fetch = FetchType.LAZY)
private Person parent;
@Column(name = "parent")
private Integer parentId;
如果那不起作用:
如果parentId是Parent实体的主键,请尝试此操作:
@JoinColumn(referencedColumnName = "id", insertable = false, name = "parent")
@ManyToOne(fetch = FetchType.LAZY)
private Person parent;
@Id
@GeneratedValue(strategy = GenerateType.AUTO)
@Column(name = "parent")
private Integer parentId;
试试这个:
@JoinColumn(referencedColumnName = "id", name = "parent")
@ManyToOne(fetch = FetchType.LAZY)
private Person parent;
@Column(name = "parent")
private Integer parentId;
如果那不起作用:
试试这个:
@JoinColumn(name = "parent")
@ManyToOne(fetch = FetchType.LAZY)
private Person parent;
@Column(name = "parent")
private Integer parentId;
答案 2 :(得分:0)
您可以为同一列创建两个属性,如下所示:
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Pixel
{
public Pixel() throws Exception
{
try
{
BufferedImage image = ImageIO.read(new File("1.jpg"));
int iW = image.getWidth();
int iH = image.getHeight();
int a[][][] = new int[255][255][255];
for(int i=0;i<iH;i++)
{
for(int j=0;j<iW;j++)
{
Color c = new Color(image.getRGB(j, i));
a[c.getRed()][c.getGreen()][c.getBlue()]++;
}
}
for(int i=0;i<255;i++)
{
for(int j=0;j<255;j++)
{
for(int k=0;k<255;k++)
{
if(a[i][j][k]>0)
{
System.out.println("colour["+i+"]["+j+"]["+k+"] repeated "+a[i][j][k]+"times \n");
//i->Red j-Green k->Blue
}
}
}
}
}
catch(Exception e){}
}
public static void main(String[] args) throws Exception
{
Pixel s1 = new Pixel();
}
}
检查代码中的输出将如下所示:
@JoinColumn(name = "CGRADO_CODIGO", referencedColumnName = "CGRADO_CODIGO")
@ManyToOne
@NotFound(action=NotFoundAction.IGNORE)
private SipreGrado sipreGrado;
@Column(name = "CGRADO_CODIGO",insertable=false,updatable=false)
private String sipreGradoCodigo;
或
sipreGradoCodigo "001"
sipreGrado null
请记住,如果您有时将实体设为NULL,则可以使用该注释跳过它
sipreGradoCodigo "001"
sipreGrado Entity SipreGrado ["001","other property","etc"]
另外,请记住设置
@NotFound(action=NotFoundAction.IGNORE)
表示您不希望包含在插入/更新查询中的那个。