我有一个数据库视图,产生一个没有真正主键的结果集.我想使用Hibernate/Persistence将此结果集映射到Java对象.当然,因为没有PK,我无法用任何字段装饰@Id.
在部署时,Hibernate抱怨失踪@Id.我该如何解决这个问题?
当试图使用@Index注释时javax.persistence,Eclipse给了我这个错误.
我在一个java.util.Date字段之前使用它,在一个用注释的类中@Entity.
之前,我org.hibernate.annotations.Index在完全相同的地方使用它很好.
在我将hibernate-core从4.1.9.Final升级到4.3.0.Beta3并将hibernate-commons-annotation从4.0.1升级到4.0.2之后,问题就出现了.它说@Index已弃用并推荐javax.persistence一个.
我发现的所有文档和示例都放在了@Index课堂成员面前.我错过了什么?
我试图用于hibernate annotations将数据插入到MySQL database没有定义主键的表中.
但事实上,该表的2个字段在表中是唯一的.我可以使用hibernate注释实现相同吗?
这是我的代码..
@Entity
@Table(name = "RolesMenuItems")
public class RolesMenuItems {
@Column(name = "RoleID")
private String roleID;
@Column(name = "MenuItemID")
private String menuItemID;
/*setter getter methods */
}
Run Code Online (Sandbox Code Playgroud) 我用Hibernate开始了一个新项目.Hibernate注释是更好的选择还是更好的Hibernate XML映射?
我已经使用Hibernate和XML配置,但我不知道注释.
注意:我不是在比较两种技术,但我想知道在使用最新技术的应用程序中使用哪种技术(即两种方式).
我试图让Hibernate @OneToOne注释工作,而且在这里没有取得多大成功......
假设我有一个名为的表status,如下所示:
+------------------------------------------------+
| status |
+------------------------------------------------+
| id | frn_user_id | frn_content_id | status |
+----+-------------+----------------+------------+
| 1 | 111 | 0 | "active" |
+----+-------------+----------------+------------+
| 2 | 0 | 222 | "inactive" |
+----+-------------+----------------+------------+
Run Code Online (Sandbox Code Playgroud)
我有一个实体User,看起来像这样:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false)
private Integer id;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "userId")
private Status status;
// getters and setters …Run Code Online (Sandbox Code Playgroud) 我有一个复合主键(IDHOLIDAYPACKAGE, IDHOLIDAYPACKAGEVARIANT)的表HolidayPackageVariant,其中IDHOLIDAYPACKAGE指的是实体HolidayPackage有许多到一个关系HolidayPackageVariant和HolidayPackage.
当我尝试在HolidayPackageVariant中进行compund PK映射时,我收到以下错误:
初始SessionFactory创建failed.org.hibernate.annotations.common.AssertionFailure:在继承状态层次结构中找不到声明类:org.wah.model.holidaypackage.HolidayPackageVariantPrimaryKey
有人可以告诉我这里我做错了什么吗?
我的POJO看起来像这样:
HolidayPackageVariant:
@Entity
@Table(name="HOLIDAYPACKAGEVARIANT")
public final class HolidayPackageVariant {
private HolidayPackageVariantPrimaryKey idCompound;
@EmbeddedId
public HolidayPackageVariantPrimaryKey getIdCompound() {
return idCompound;
}
// other code
}
Run Code Online (Sandbox Code Playgroud)
HolidayPackageVariantPrimaryKey
@Embeddable
public final class HolidayPackageVariantPrimaryKey implements Serializable {
private Integer idHolidayPackageVariant;
private HolidayPackage holidayPackage;
public HolidayPackageVariantPrimaryKey(){}
public HolidayPackageVariantPrimaryKey(int id, HolidayPackage pkg){
setIdHolidayPackageVariant(id);
setHolidayPackage(pkg);
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "IDHOLIDAYPACKAGEVARIANT", nullable = …Run Code Online (Sandbox Code Playgroud) java hibernate jpa composite-primary-key hibernate-annotations
我对某个领域有一种奇特的映射:
@ElementCollection
@CollectionTable(name = "studentGradeLevel", joinColumns = @JoinColumn(name = "studentId"))
@MapKeyJoinColumn(name = "schoolYearId")
@Column(name = "gradeLevel", nullable = false)
@ForeignKey(name = "fkStudentGrade2Student")
private Map<SchoolYear, GradeLevel> gradeLevels;
Run Code Online (Sandbox Code Playgroud)
SchoolYear是一个实体,GradeLevel是一个枚举.
我正在使用Hibernate工具为架构生成DDL.生成的架构如下:
create table studentGradeLevel (
studentId numeric(19,0) not null,
gradeLevel int not null,
schoolYearId int not null,
primary key (studentId, schoolYearId)
);
alter table studentGradeLevel
add constraint FK1BCA4A883A97C498
foreign key (schoolYearId)
references schoolYear;
alter table studentGradeLevel
add constraint fkStudentGrade2Student
foreign key (studentId)
references student;
Run Code Online (Sandbox Code Playgroud)
问题是我似乎无法更改集合表和用作映射键的实体的表之间的外键的约束名称.
我已经使用@ForeignKey为@OneToMany,@ ManyToMany和其他@ElementCollections指定约束名称没有问题.我试过@ ForiegnKey的"inverseName"属性,但它似乎被忽略了.@MapKeyJoinColumn似乎没有任何会影响它的属性.
有谁知道有没有办法做到这一点?
在Parent类中有一个列表List.保存父级时,已添加或更改的子级应由休眠保存/更新.
我已经找到了很多这方面的解释,但是,我只是没有得到它的工作.
Parent.class尝试A.
@Entity
public class Parent {
// id and other attributes
@OneToMany(mappedBy = "parent")
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.ALL)
protected List<child> children;
Run Code Online (Sandbox Code Playgroud)
Parent.class尝试B
@Entity
public class Parent {
// id and other attributes
@OneToMany(mappedBy = "parent", cascade = { javax.persistence.CascadeType.ALL },
orphanRemoval = true)
@org.hibernate.annotations.Cascade({
org.hibernate.annotations.CascadeType.PERSIST,
org.hibernate.annotations.CascadeType.MERGE,
org.hibernate.annotations.CascadeType.REFRESH,
org.hibernate.annotations.CascadeType.SAVE_UPDATE,
org.hibernate.annotations.CascadeType.REPLICATE,
org.hibernate.annotations.CascadeType.LOCK,
org.hibernate.annotations.CascadeType.DETACH })
protected List<child> children;
Run Code Online (Sandbox Code Playgroud)
将子项添加到新父项.之后两者都被保存了
sessionFactory.getCurrentSession().saveOrUpdate(parent);
Run Code Online (Sandbox Code Playgroud)
但是,当刷新时,我收到以下错误:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: de.pockettaxi.backend.model.ride.RideSingle
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:243)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:456)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:265)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:275) …Run Code Online (Sandbox Code Playgroud) 保持简短和甜美:
有hibernate-commons-annotations 4.1.0-Final和hibernate-annotations 3.5.6-Final.
我是个小伙子,他们之间有什么区别,我需要他们两个吗?
试图"避免"JPA,我的意思是使用嵌入在Hibernate中的JPA 2.0标准.
谢谢!
在保存hibernate对象时,hibernate中是否有设置忽略属性的空值?
注意
在我的情况下,我通过Jackson将JSON反序列化为Hibernate Pojo.
JSON只包含Pojo的一些字段.如果我保存Pojo,那么不在JSON中的字段在Pojo中为空,而hibernate则更新它们.
我来到了这个环境updateable=false,但这不是100%的解决方案.
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-property
也许有人有另一个想法......
笔记2:
根据Hibernate Docs,dynamicUpdate 注释正是如此
dynamicInsert/dynamicUpdate(默认为false):
指定应在运行时生成INSERT/UPDATE SQL,并且仅包含值不为null的列.
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#mapping-declaration-class
有趣的是,如果您通过dynamic-update文档在XML中定义它,请不要提及NULL值的hanlding.
dynamic-update(可选 - 默认为false):
指定应在运行时生成UPDATE SQL,并且只能包含值已更改的列.
由于我同时使用注释和 xml配置,hibernate似乎忽略了我的dynamicUpdate=true注释.
hibernate ×9
java ×6
jpa ×3
cascade ×1
dao ×1
null ×1
one-to-many ×1
one-to-one ×1
orm ×1
primary-key ×1
queryover ×1