我用Hibernate 4.3.8创建了一些Hibernate映射。
@Entity
@Table(name = ErrorEntity.TABLE_ID)
@XmlRootElement(name = ErrorEntity.XML_ROOT_TAG)
public class ErrorEntity {
/**
*
*/
private static final long serialVersionUID = 8083918635458543738L;
public static final String TABLE_ID = "Error";
public static final String ERRORCODE = "error_code";
public static final String ENV_ID = "envid";
private Integer error_code;
private Integer envId;
private EnvironmentEntity environment;
public ErrorEntity() {
}
@Id
@Column(name = ErrorEntity.ERRORCODE)
public Integer getError_code() {
return error_code;
}
public void setError_code(Integer errorcode) {
this.error_code = errorcode;
}
@Column(name = ErrorEntity.ENV_ID)
public Integer getEnvId() {
return envId;
}
public void setEnvId(Integer envId) {
this.envId = envId;
}
@ManyToOne
@JoinColumn(name = ErrorEntity.ENV_ID, referencedColumnName = EnvironmentEntity.ENV_ID, insertable = false, updatable = false)
public EnvironmentEntity getEnvironment() {
return environment;
}
public void setEnvironment(EnvironmentEntity environment) {
this.environment = environment;
}
}
如您所见,映射属性ENV_ID映射了两次。
这样我就可以设置JoinColumn值,而无需查询数据库来获取映射对象,因为此时我有JoinColumn值。
ENV_ID的值被正确地写入数据库,但是如果我稍后查询这个错误实体并尝试获取环境实体,则引用为null。
ErrorEntity error = (ErrorEntity) criteria.uniqueResult();
System.out.println(error.getEnvironment().getName());
getEnvironment()返回null。
有什么想法如何实现这一点?
编辑
它像预期的那样使用PK集创建一个新对象。
现在我有一个特殊的情况,它不起作用。我需要引用另一个对象,其中joincolumn不是PK。我知道我将加入的值是唯一的,但也有一些重复的值我不会加入。
然而,Hibernate似乎无法自动映射这种关系。
ErrorEntity error = new ErrorEntity();
SignalEntity signal = new SignalEntity();
signal.setName(signalName);
error.setSignal(signal);
问题是在这种情况下我没有SignalID(PK)。另一个想法是查询db,但是太慢了。
我试图创建一个包含3列的复合PK,但这在另一个地方打破了逻辑。
有可能创建两个独立的PK吗?
ErrorEntity
有两个ErrorEntity。ENV_ID
映射,除非使用@MapsId,否则这是一个配置问题。
在EnvironmentEntity
表中应该有一个env_id
列,并且只有以下内容:
@ManyToOne
@JoinColumn(name = ErrorEntity.ENV_ID, referencedColumnName = EnvironmentEntity.ENV_ID, insertable = false, updatable = false)
public EnvironmentEntity getEnvironment() {
return environment;
}
在ErrorEntity
中映射。
我的建议是删除以下内容:
@Column(name = ErrorEntity.ENV_ID)
public Integer getEnvId() {
return envId;
}
要在不查询数据库的情况下直接设置envId并请求整个环境实体,可以执行以下操作:
errrorEntity.setEnvironment(new EnvironmentEntity());
errrorEntity.getEnvironment().setEnvId(envId);
这不是JPA标准要求,但Hibernate支持它。
嗨,我遇到这样的情况: 带有2个字段的实体标记,其中包含2组对象(Obj1、Obj2)。删除Obj1时,我想删除标记实体中设置的Obj1中包含的所有信息。你能告诉我怎么做吗? 检查点中没有对标记的引用。若我将Cascade设置为ManyToMany,那个么当我删除标记时,所有带有该标记的用户都会被删除。我想要的是在删除检查点时删除tag\u检查点表中的行。我应该自己做还是有好办法??
问题内容: 我通过使用本教程学习Spring,Hibernate,Maven:Chad Lung:一个使用Netbeans 7,JUnit,Maven,HSQLDB,Spring和Hibernate的项目 。可以,但是我需要建立一对多关系(一个雇员有很多任务)。我已经尝试了许多示例,但仍然不知道如何使代码正常工作: Employee.java: Task.java: db-config.xml:
是否有一种方法可以以方式删除数据,不时地释放锁?
我已经创建了一个数据库any逻辑。以前,我将行中的信息与列相关联,即行中有一个组件,其属性在列中,并将其放在函数中。现在我想让组件成为列和属性,但是不知道如何让它们都联系起来。下面是我为前者编写的代码: 所以箱号是组件,场地是属性之一。使用这种方法,站点是一列,但我希望它是一行。
我想知道我应该怎么做,因为我读了很多文章试图理解这一点,包括很多问题。我读过的书中,没有一本是非常中肯的。 我想知道当使用级联规则以及应用程序定义数据库时会发生什么,因为这将定义我应该采用以下方法还是其他方法。 如果我现在对对象调用删除操作(无论是通过还是),会发生以下哪种情况? > hibernate操作将删除已加载到会话缓存中的所有相应条记录(可能是也可能不是实际数据库中存在的所有条记录),然
问题内容: 这是我的类,用于从数据库中获取数据 这是我的文件: 当我运行该程序时,出现异常后,请帮助我如何解决它。我是Hibernate的新手,尝试学习但被卡住了。 虽然我能够将数据存储在数据库中,但我有2个用于第一和第二类的数据获取数据,但在获取数据时遇到了问题PLZ帮助。 问题答案: 让我引述一下: 据我所知,您正在使用表名。 所以应该是这样的: