我在尝试更新我的实体时遇到以下问题:
"A collection with cascade=”all-delete-orphan” was no longer referenced by the owning entity instance".
Run Code Online (Sandbox Code Playgroud)
我有一个父实体,它有Set<...>一些子实体.当我尝试更新它时,我将所有引用设置为此集合并进行设置.
以下代码表示我的映射:
@OneToMany(mappedBy = "parentEntity", fetch = FetchType.EAGER)
@Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN })
public Set<ChildEntity> getChildren() {
return this.children;
}
Run Code Online (Sandbox Code Playgroud)
我试图只清理Set <..>,根据这个:如何"可能"解决问题,但它不起作用.
如果您有任何想法,请告诉我.
谢谢!
我是hibernate的新手,需要使用一对多和多对一的关系.它是我对象中的双向关系,因此我可以从任一方向遍历.mappedBy是推荐的方法,但是,我无法理解.有人能解释一下:
为了我的例子,这里是我的带注释的类:
Airline OWNS很多 AirlineFlightsAirlineFlights属于ONE Airline航空公司:
@Entity
@Table(name="Airline")
public class Airline {
private Integer idAirline;
private String name;
private String code;
private String aliasName;
private Set<AirlineFlight> airlineFlights = new HashSet<AirlineFlight>(0);
public Airline(){}
public Airline(String name, String code, String aliasName, Set<AirlineFlight> flights) {
setName(name);
setCode(code);
setAliasName(aliasName);
setAirlineFlights(flights);
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="IDAIRLINE", nullable=false)
public Integer getIdAirline() {
return idAirline;
}
private void setIdAirline(Integer idAirline) {
this.idAirline = idAirline;
}
@Column(name="NAME", nullable=false)
public …Run Code Online (Sandbox Code Playgroud) 我的Java bean有一个childCount属性.此属性未映射到数据库列.相反,它应该由数据库计算,其COUNT()函数是在我的Java bean及其子代的连接上运行的.如果这个属性可以按需计算/"懒惰"会更好,但这不是强制性的.
在最糟糕的情况下,我可以使用HQL或Criteria API设置此bean的属性,但我不愿意.
Hibernate @Formula注释可能会有所帮助,但我几乎找不到任何文档.
任何帮助非常感谢.谢谢.
我正在尝试使用Hibernate注释为我的数据库表编写模型类.
我有两个表,每个表都有一个主键User和Question.
@Entity
@Table(name="USER")
public class User
{
@Id
@Column(name="user_id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name="username")
private String username;
// Getter and setter
}
Run Code Online (Sandbox Code Playgroud)
问题表.
@Entity
@Table(name="QUESTION")
public class Questions extends BaseEntity{
@Id
@Column(name="question_id")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name="question_text")
private String question_text;
// Getter and setter
}
Run Code Online (Sandbox Code Playgroud)
我还有一个表UserAnswer,它有userId和questionId作为上述两个表中的外键.
但我无法找到如何在UserAnswer表中引用这些约束.
@Entity
@Table(name="UserAnswer ")
public class UserAnswer
{
@Column(name="user_id")
private User user;
//@ManyToMany
@Column(name="question_id")
private Questions questions ;
@Column(name="response")
private String response;
// Getter and setter
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个Web应用程序,它使用Hibernate在数据库上进行CRUD操作.我收到一个错误,表示该表未映射.请参阅Java文件:
错误信息:
org.springframework.orm.hibernate3.HibernateQueryException: Books is not mapped [SELECT COUNT(*) FROM Books]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:660)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
...
Caused by: org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]
at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:111)
at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)
...
Run Code Online (Sandbox Code Playgroud)
这是我的DAO.java方法:
public int getTotalBooks(){
return DataAccessUtils.intResult(hibernateTemplate.find(
"SELECT COUNT(*) FROM Books"));
}
Run Code Online (Sandbox Code Playgroud)
Book.java:
@Entity
@Table(name="Books")
public class Book {
@Id
@GeneratedValue
@Column(name="id")
private int id;
@Column(name="title", nullable=false)
private String title; …Run Code Online (Sandbox Code Playgroud) 我可以从谷歌收集的是:
Hibernate使用代理对象来实现延迟加载.当我们请求从数据库加载Object,并且获取的Object具有对另一个具体对象的引用时,Hibernate返回代理而不是具体的关联对象.
Hibernate使用字节码检测(由javassist提供)创建代理对象.Hibernate在运行时使用代码生成库创建实体类的子类,并用新创建的代理替换实际对象.
那么,Proxy对象到底包含什么?
它是否包含仅设置了id字段的骨架对象引用对象?我们调用get方法时会设置其他字段吗?
Proxy对象是否包含JDBC语句以获取完全填充引用对象所需的所有数据.
还有什么我可能会失踪的吗?
我不是要求勺子喂食,但如果你能提供任何链接信息很棒.
对上述说明的任何更正也将受到欢迎.
例.
class Address {
String city;
String country;
}
class Person{
int id;
String name;
Address address;
}
Run Code Online (Sandbox Code Playgroud)
当我们尝试加载Person对象时,Hibernate会将Person类子类化为:
class ProxyPerson extends Person {
int id;
String name;
Address proxyCGLIBObject;
}
Run Code Online (Sandbox Code Playgroud)
并返回一个ProxyPerson对象.ProxyPerson的对象将具有id和name的值,但是Address的代理.
我对么?
在代理对象上添加toString()方法可以期待什么?
我正在使用现有的数据库架构处理遗留代码库.现有代码使用SQL和PL/SQL在DB上执行查询.我们的任务是使项目数据库引擎不可知的一小部分(最初,最终改变一切).我们选择使用Hibernate 3.3.2.GA和"*.hbm.xml"映射文件(而不是注释).遗憾的是,更改现有架构是不可行的,因为我们无法回退任何遗留功能.
我遇到的问题是当我试图映射单向,一对多的关系时,FK 也是复合PK的一部分.这是类和映射文件......
CompanyEntity.java
public class CompanyEntity {
private Integer id;
private Set<CompanyNameEntity> names;
...
}
Run Code Online (Sandbox Code Playgroud)
CompanyNameEntity.java
public class CompanyNameEntity implements Serializable {
private Integer id;
private String languageId;
private String name;
...
}
Run Code Online (Sandbox Code Playgroud)
CompanyNameEntity.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.jboss.org/dtd/hibernate/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example">
<class name="com.example.CompanyEntity" table="COMPANY">
<id name="id" column="COMPANY_ID"/>
<set name="names" table="COMPANY_NAME" cascade="all-delete-orphan" fetch="join" batch-size="1" lazy="false">
<key column="COMPANY_ID"/>
<one-to-many entity-name="vendorName"/>
</set>
</class>
<class entity-name="companyName" name="com.example.CompanyNameEntity" table="COMPANY_NAME">
<composite-id>
<key-property name="id" column="COMPANY_ID"/>
<key-property name="languageId" …Run Code Online (Sandbox Code Playgroud) 我正在使用SEAM 2/Hibernate和PostgreSQL 9数据库.我有下表
Active Band
===========
active_band_id serial
active_band_user text
active_band_date timestamp
active_band_process integer
Run Code Online (Sandbox Code Playgroud)
我想添加一个约束,确保每个新条目都具有active_band_user和active_band_date的唯一组合.
每秒可能有很多尝试插入,所以我需要尽可能高效,是否有可以在实体映射中使用的SEAM/hibernate注释?
提前致谢
我有一张桌子
许可:
我现在正在做的是创建一个返回权限对象的查询,然后以编程方式将值放在地图中
1-但我想知道是否可以创建一个HQL(或者如果不可能的本机sql)来选择permission_id,permission_name并在地图中返回它们.
2-是否可以以一对多的关系返回地图而不是跟随列表或集合
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "perm_cat_map", joinColumns = { @JoinColumn(name = "perm_cat_id") }, inverseJoinColumns = { @JoinColumn(name = "permission_id") })
private List<Permission> permissions = new ArrayList<Permission>(0);
Run Code Online (Sandbox Code Playgroud)
有可能有类似的东西:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "perm_cat_map", joinColumns = { @JoinColumn(name = "perm_cat_id") }, inverseJoinColumns = { @JoinColumn(name = "permission_id") })
private Map<String,String> permissions = new ArrayList<String,String>(0);
Run Code Online (Sandbox Code Playgroud)
其中两个字符串是permission_id,permission_name.
像往常一样,Java枚举类型具有相应的代码和名称描述.包含此类字段的Java类将它们包含为Enum:
public enum MyEnum{
SOMEINSTANCE(1, "test1"),
SOMEINSTANCE(2, "test2");
private final int code;
private final String name;
private MyEnum(int code, String name){
this.code = code;
this.name = name;
}
... helper getter for code and name
}
@Entity
puclic class EnumHolder{
private MyEnum myEnum;
}
Run Code Online (Sandbox Code Playgroud)
我是JPA的新手,但我希望有' myEnums'表,看起来像:
code int not null, name varchar(50) not null)
Run Code Online (Sandbox Code Playgroud)
在我的enumHolder表中,我希望有一个myEnumCode指向myEnums表的字段.
使用currenlty支持EnumType.ORDINAL和EnumType.STRING我认为不是一个好主意.
另一个问题.如何myEnums使用Java MyEnum类数据填写表格?你会怎么做?请最好的方法.
PS:这是我能提供的解决方案:
让我们假设有表myEnum与code和名称fields.Java MyEnum枚举,在问题中描述.enumHolder表需要myEnumCode引用 …