标签: hibernate-mapping

Hibernate - 拥有实体实例不再引用具有cascade ="all-delete-orphan"的集合

我在尝试更新我的实体时遇到以下问题:

"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 <..>,根据这个:如何"可能"解决问题,但它不起作用.

如果您有任何想法,请告诉我.

谢谢!

java hibernate hibernate-mapping

194
推荐指数
11
解决办法
18万
查看次数

谁能在hibernate中解释mappedBy?

我是hibernate的新手,需要使用一对多和多对一的关系.它是我对象中的双向关系,因此我可以从任一方向遍历.mappedBy是推荐的方法,但是,我无法理解.有人能解释一下:

  • 推荐的使用方法是什么?
  • 它解决了什么目的?

为了我的例子,这里是我的带注释的类:

  • Airline OWNS很多 AirlineFlights
  • 很多都 AirlineFlights属于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 hibernate hibernate-mapping java-ee

165
推荐指数
5
解决办法
16万
查看次数

如何使用JPA和Hibernate映射计算的属性

我的Java bean有一个childCount属性.此属性未映射到数据库列.相反,它应该由数据库计算,其COUNT()函数是在我的Java bean及其子代的连接上运行的.如果这个属性可以按需计算/"懒惰"会更好,但这不是强制性的.

在最糟糕的情况下,我可以使用HQL或Criteria API设置此bean的属性,但我不愿意.

Hibernate @Formula注释可能会有所帮助,但我几乎找不到任何文档.

任何帮助非常感谢.谢谢.

java orm hibernate jpa hibernate-mapping

98
推荐指数
2
解决办法
11万
查看次数

如何使用Hibernate注释标记外键约束?

我正在尝试使用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)

我怎样才能做到这一点?

java hibernate hibernate-mapping hibernate-annotations

69
推荐指数
2
解决办法
11万
查看次数

Hibernate表未在HQL查询中映射错误

我有一个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)

java eclipse spring hibernate hibernate-mapping

57
推荐指数
3
解决办法
15万
查看次数

Hibernate代理对象包含什么?

我可以从谷歌收集的是:

  • 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()方法可以期待什么?

java orm proxy hibernate hibernate-mapping

43
推荐指数
1
解决办法
2万
查看次数

如何在复合id键属性上映射"insert ='false'update ='false'",该属性也用于一对多FK?

我正在使用现有的数据库架构处理遗留代码库.现有代码使用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)

hbm hibernate-mapping hbmxml hibernate-onetomany

41
推荐指数
1
解决办法
13万
查看次数

多列的唯一约束

我正在使用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注释?

提前致谢

postgresql hibernate seam hibernate-mapping seam2

40
推荐指数
1
解决办法
4万
查看次数

如何使用HQL返回Map <Key,Value>

我有一张桌子

许可:

  • ID
  • 名称
  • 降序

我现在正在做的是创建一个返回权限对象的查询,然后以编程方式将值放在地图中

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.

hibernate hql hibernate-mapping

34
推荐指数
5
解决办法
8万
查看次数

JPA枚举类型映射.最好的方法

像往常一样,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:这是我能提供的解决方案:

让我们假设有表myEnumcode和名称fields.Java MyEnum枚举,在问题中描述.enumHolder表需要myEnumCode引用 …

java enums jpa hibernate-mapping

33
推荐指数
2
解决办法
6万
查看次数