社区
Java EE
帖子详情
如何查找数据库中字段类型CHAR(10),值为空的记录。用ejb_ql实现。
fbizlq
2003-07-17 03:25:46
如何查找数据库中字段类型CHAR(10),值为空的记录。用ejb_ql实现。
...全文
40
2
打赏
收藏
如何查找数据库中字段类型CHAR(10),值为空的记录。用ejb_ql实现。
如何查找数据库中字段类型CHAR(10),值为空的记录。用ejb_ql实现。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ll42002
2003-07-17
打赏
举报
回复
SELECT OBJECT(o) FROM beanname AS o WHERE o.字段名 IS EMPTY
ll42002
2003-07-17
打赏
举报
回复
up!!
Hibernate注释大全收藏
Hibernate注释大全收藏 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } } @Entity 注解将一个类声明为实体 Bean, @Id 注解声明了该实体Bean的标识属性。 Hibernate 可以对类的属性或者方法进行注解。属性对应field类别,方法的 getXxx()对应property类别。 定义表 通过 @Table 为实体Bean指定对应
数据库
表,目录和schema的名字。 @Entity @Table(name="tbl_sky") public class Sky implements Serializable { ... @Table 注解包含一个schema和一个catelog 属性,使用@UniqueConstraints 可以定义表的唯一约束。 @Table(name="tbl_sky", uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})} ) 上述代码在 "month" 和 "day" 两个 field 上加上 unique constrainst. @Version 注解用于支持乐观锁版本控制。 @Entity public class Flight implements Serializable { ... @Version @Column(name="OPTLOCK") public Integer getVersion() { ... } } version属性映射到 "OPTLOCK" 列,entity manager 使用这个
字段
来检测冲突。 一般可以用 数字 或者 timestamp
类型
来支持 version. 实体Bean
中
所有非static 非 transient 属性都可以被持久化,除非用@Transient注解。 默认情况下,所有属性都用 @Basic 注解。 public transient int counter; //transient property private String firstname; //persistent property @Transient String getLengthInMeter() { ... } //transient property String getName() {... } // persistent property @Basic int getLength() { ... } // persistent property @Basic(fetch = FetchType.LAZY) String getDetailedComment() { ... } // persistent property @Temporal(TemporalType.TIME) java.util.Date getDepartureTime() { ... } // persistent property @Enumerated(EnumType.STRING) Starred getNote() { ... } //enum persisted as String in database 上述代码
中
counter, lengthInMeter 属性将忽略不被持久化,而 firstname, name, length 被定义为可持久化和可获取的。 @TemporalType.(DATE,TIME,TIMESTAMP) 分别Map java.s
ql
.(Date, Time, Timestamp). @Lob 注解属性将被持久化为 Blog 或 Clob
类型
。具体的java.s
ql
.Clob,
Char
acter[],
char
[] 和 java.lang.String 将被持久化为 Clob
类型
. java.s
ql
.Blob, Byte[], byte[] 和 serializable type 将被持久化为 Blob
类型
。 @Lob public String getFullText() { return fullText; // clob type } @Lob public byte[] getFullCode() { return fullCode; // blog type } @Column 注解将属性映射到列。 @Entity public class Flight implements Serializable { ... @Column(updatable = false, name = "flight_name", nullable = false, length=50) public String getName() { ... } 定义 name 属性映射到 flight_name column, not null, can't update, length equal 50 @Column( name="columnName"; (1) 列名 boolean unique() default false; (2) 是否在该列上设置唯一约束 boolean nullable() default true; (3) 列可
空
? boolean insertable() default true; (4) 该列是否作为生成 insert语句的一个列 boolean updatable() default true; (5) 该列是否作为生成 update语句的一个列 String columnDefinition() default ""; (6) 默认值 String table() default ""; (7) 定义对应的表(deault 是主表) int length() default 255; (8) 列长度 int precision() default 0; // decimal precision (9) decimal精度 int scale() default 0; // decimal scale (
10
) decimal长度 嵌入式对象(又称组件)也就是别的对象定义的属性 组件类必须在类一级定义 @Embeddable 注解。在特定的实体关联属性上使用 @Embeddable 和 @AttributeOverride 注解可以覆盖该属性对应的嵌入式对象的列映射。 @Entity public class Person implements Serializable { // Persistent component using defaults Address homeAddress; @Embedded @AttributeOverrides( { @AttributeOverride(name="iso2", column = @Column(name="bornIso2") ), @AttributeOverride(name="name", column = @Column(name="bornCountryName") ) } ) Country bornIn; ... } @Embeddable public class Address implements Serializable { String city; Country nationality; //no overriding here } @Embeddable public class Country implements Serializable { private String iso2; @Column(name="countryName") private String name; public String getIso2() { return iso2; } public void setIso2(String iso2) { this.iso2 = iso2; } public String getName() { return name; } public void setName(String name) { this.name = name; } ... } Person 类定义了 Address 和 Country 对象,具体两个类
实现
见上。 无注解属性默认值: • 属性为简单
类型
,则映射为 @Basic • 属性对应的
类型
定义了 @Embeddable 注解,则映射为 @Embedded • 属性对应的
类型
实现
了Serializable,则属性被映射为@Basic并在一个列
中
保存该对象的serialized版本。 • 属性的
类型
为 java.s
ql
.Clob or java.s
ql
.Blob, 则映射到 @Lob 对应的
类型
。 映射主键属性 @Id 注解可将实体Bean
中
某个属性定义为主键,使用@GenerateValue注解可以定义该标识符的生成策略。 • AUTO - 可以是 identity column, sequence 或者 table
类型
,取决于不同底层的
数据库
• TABLE - 使用table保存id值 • IDENTITY - identity column • SEQUENCE - seque nce @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE") public Integer getId() { ... } @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public Long getId() { ... } AUTO 生成器,适用与可移值的应用,多个@Id可以共享同一个 identifier生成器,只要把generator属性设成相同的值就可以。通过@SequenceGenerator 和 @TableGenerator 可以配置不同的 identifier 生成器。
//and the annotation equivalent @javax.persistence.TableGenerator( name="EMP_GEN", table="GENERATOR_TABLE", pkColumnName = "key", valueColumnName = "hi" pkColumnValue="EMP", allocationSize=20 )
//and the annotation equivalent @javax.persistence.SequenceGenerator( name="SEQ_GEN", sequenceName="my_sequence", allocationSize=20 ) The next example shows the definition of a sequence generator in a class scope: @Entity @javax.persistence.SequenceGenerator( name="SEQ_STORE", sequenceName="my_sequence" ) public class Store implements Serializable { private Long id; @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE") public Long getId() { return id; } } Store类使用名为my_sequence的sequence,并且SEQ_STORE生成器对于其他类是不可见的。 通过下面语法,你可以定义组合键。 • 将组件类注解为 @Embeddable, 并将组件的属性注解为 @Id • 将组件的属性注解为 @EmbeddedId • 将类注解为 @IdClass,并将该实体
中
所有主键的属性都注解为 @Id @Entity @IdClass(FootballerPk.class) public class Footballer { //part of the id key @Id public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } //part of the id key @Id public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public String getClub() { return club; } public void setClub(String club) { this.club = club; } //appropriate equals() and hashCode() implementation } @Embeddable public class FootballerPk implements Serializable { //same name and type as in Footballer public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } //same name and type as in Footballer public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } //appropriate equals() and hashCode() implementation } @Entity @AssociationOverride( name="id.channel", joinColumns = @JoinColumn(name="chan_id") ) public class TvMagazin { @EmbeddedId public TvMagazinPk id; @Temporal(TemporalType.TIME) Date time; } @Embeddable public class TvMagazinPk implements Serializable { @ManyToOne public Channel channel; public String name; @ManyToOne public Presenter presenter; } 映射继承关系
EJB
支持3种
类型
的继承。 • Table per Class Strategy: the
element in Hibernate 每个类一张表 • Single Table per Class Hierarchy Strategy: the
element in Hibernate 每个类层次结构一张表 • Joined Subclass Strategy: the
element in Hibernate 连接的子类策略 @Inheritance 注解来定义所选的之类策略。 每个类一张表 @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Flight implements Serializable { 有缺点,如多态查询或关联。Hibernate 使用 S
QL
Union 查询来
实现
这种策略。 这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn( name="planetype", discriminatorType=DiscriminatorType.STRING ) @DiscriminatorValue("Plane") public class Plane { ... } @Entity @DiscriminatorValue("A320") public class A320 extends Plane { ... } 整个层次结构
中
的所有父类和子类属性都映射到同一个表
中
,他们的实例通过一个辨别符列(discriminator)来区分。 Plane 是父类。@DiscriminatorColumn 注解定义了辨别符列。对于继承层次结构
中
的每个类, @DiscriminatorValue 注解指定了用来辨别该类的值。 辨别符列名字默认为 DTYPE,其默认
值为
实体名。其
类型
为DiscriminatorType.STRING。 连接的子类 @Entity @Inheritance(strategy=InheritanceType.JOINED) public class Boat implements Serializable { ... } @Entity public class Ferry extends Boat { ... } @Entity @PrimaryKeyJoinColumn(name="BOAT_ID") public class AmericaCupClass extends Boat { ... } 以上所有实体使用 JOINED 策略 Ferry和Boat class使用同名的主键关联(eg: Boat.id = Ferry.id), AmericaCupClass 和 Boat 关联的条件为 Boat.id = AmericaCupClass.BOAT_ID. 从父类继承的属性 @MappedSuperclass public class BaseEntity { @Basic @Temporal(TemporalType.TIMESTAMP) public Date getLastUpdate() { ... } public String getLastUpdater() { ... } ... } @Entity class Order extends BaseEntity { @Id public Integer getId() { ... } ... } 继承父类的一些属性,但不用父类作为映射实体,这时候需要 @MappedSuperclass 注解。 上述实体映射到
数据库
中
的时候对应 Order 实体Bean, 其具有 id, lastUpdate, lastUpdater 三个属性。如果没有@MappedSuperclass 注解,则父类
中
属性忽略,这是 Order 实体 Bean 只有 id 一个属性。 映射实体Bean的关联关系 一对一 使用 @OneToOne 注解可以建立实体Bean之间的一对一关系。一对一关系有3种情况。 • 关联的实体都共享同样的主键。 @Entity public class Body { @Id public Long getId() { return id; } @OneToOne(cascade = CascadeType.ALL) @PrimaryKeyJoinColumn public Heart getHeart() { return heart; } ... } @Entity public class Heart { @Id public Long getId() { ...} } 通过@PrimaryKeyJoinColumn 注解定义了一对一的关联关系。 多对一 使用 @ManyToOne 注解定义多对一关系。 @Entity() public class Flight implements Serializable { @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} ) @JoinColumn(name="COMP_ID") public Company getCompany() { return company; } ... } 其
中
@JoinColumn 注解是可选的,关键
字段
默认值和一对一关联的情况相似。列名为:主题的关联属性名 + 下划线 + 被关联端的主键列名。本例
中
为company_id,因为关联的属性是company, Company的主键为 id. @ManyToOne 注解有个targetEntity属性,该参数定义了目标实体名。通常不需要定义,大部分情况为默认值。但下面这种情况则需要 targetEntity 定义(使用接口作为返回值,而不是常用的实体)。 @Entity() public class Flight implements Serializable { @ManyToOne(cascade= {CascadeType.PERSIST,CascadeType.MERGE},targetEntity= CompanyImpl.class) @JoinColumn(name="COMP_ID") public Company getCompany() { return company; } ... } public interface Company { ... 多对一也可以通过关联表的方式来映射,通过 @JoinTable 注解可定义关联表。该关联表包含指回实体的外键(通过@JoinTable.joinColumns)以及指向目标实体表的外键(通过@JoinTable.inverseJoinColumns). @Entity() public class Flight implements Serializable { @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} ) @JoinTable(name="Flight_Company", joinColumns = @JoinColumn(name="FLIGHT_ID"), inverseJoinColumns = @JoinColumn(name="COMP_ID") ) public Company getCompany() { return company; } ... } 集合
类型
一对多 @OneToMany 注解可定义一对多关联。一对多关联可以是双向的。 双向 规范
中
多对一端几乎总是双向关联
中
的主体(owner)端,而一对多的关联注解为 @OneToMany(mappedBy=) @Entity public class Troop { @OneToMany(mappedBy="troop") public Set
getSoldiers() { ... } @Entity public class Soldier { @ManyToOne @JoinColumn(name="troop_fk") public Troop getTroop() { ... } Troop 通过troop属性和Soldier建立了一对多的双向关联。在 mappedBy 端不必也不能定义任何物理映射。 单向 @Entity public class Customer implements Serializable { @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @JoinColumn(name="CUST_ID") public Set
getTickets() { ... } @Entity public class Ticket implements Serializable { ... //no bidir } 一般通过连接表来
实现
这种关联,可以通过@JoinColumn注解来描述这种单向关联关系。上例 Customer 通过 CUST_ID 列和 Ticket 建立了单向关联关系。 通过关联表来处理单向关联 @Entity public class Trainer { @OneToMany @JoinTable( name="TrainedMonkeys", joinColumns = @JoinColumn( name="trainer_id"), inverseJoinColumns = @JoinColumn( name="monkey_id") ) public Set
getTrainedMonkeys() { ... } @Entity public class Monkey { ... //no bidir } 通过关联表来处理单向一对多关系是首选,这种关联通过 @JoinTable 注解来进行描述。上例子
中
Trainer 通过TrainedMonkeys表和Monkey建立了单向关联关系。其
中
外键trainer_id关联到Trainer(joinColumns)而外键monkey_id关联到Monkey(inverseJoinColumns). 默认处理机制 通过连接表来建立单向一对多关联不需要描述任何物理映射,表名由一下3个部分组成,主表(owner table)表名 + 下划线 + 从表(the other side table)表名。指向主表的外键名:主表表名+下划线+主表主键列名 指向从表的外键定义为唯一约束,用来表示一对多的关联关系。 @Entity public class Trainer { @OneToMany public Set
getTrainedTigers() { ... } @Entity public class Tiger { ... //no bidir } 上述例子
中
Trainer 和 Tiger 通过 Trainer_Tiger 连接表建立单向关联关系。其
中
外键 trainer_id 关联到 Trainer表,而外键 trainedTigers_id 关联到 Tiger 表。 多对多 通过 @ManyToMany 注解定义多对多关系,同时通过 @JoinTable 注解描述关联表和关联条件。其
中
一端定义为 owner, 另一段定义为 inverse(对关联表进行更新操作,这段被忽略)。 @Entity public class Employer implements Serializable { @ManyToMany( targetEntity=org.hibernate.test.metadata.manytomany.Employee.class, cascade={CascadeType.PERSIST, CascadeType.MERGE} ) @JoinTable( name="EMPLOYER_EMPLOYEE", joinColumns=@JoinColumn(name="EMPER_ID"), inverseJoinColumns=@JoinColumn(name="EMPEE_ID") ) public Collection getEmployees() { return employees; } ... } @Entity public class Employee implements Serializable { @ManyToMany( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "employees", targetEntity = Employer.class ) public Collection getEmployers() { return employers; } } 默认值: 关联表名:主表表名 + 下划线 + 从表表名;关联表到主表的外键:主表表名 + 下划线 + 主表
中
主键列名;关联表到从表的外键名:主表
中
用于关联的属性名 + 下划线 + 从表的主键列名。 用 cascading
实现
传播持久化(Transitive persistence) cascade 属性接受
值为
CascadeType 数组,其
类型
如下: • CascadeType.PERSIST: cascades the persist (create) operation to associated entities persist() is called or if the entity is managed 如果一个实体是受管状态,或者当 persist() 函数被调用时,触发级联创建(create)操作。 • CascadeType.MERGE: cascades the merge operation to associated entities if merge() is called or if the entity is managed 如果一个实体是受管状态,或者当 merge() 函数被调用时,触发级联合并(merge)操作。 • CascadeType.REMOVE: cascades the remove operation to associated entities if delete() is called 当 delete() 函数被调用时,触发级联删除(remove)操作。 • CascadeType.REFRESH: cascades the refresh operation to associated entities if refresh() is called 当 refresh() 函数被调用时,出发级联更新(refresh)操作。 • CascadeType.ALL: all of the above 以上全部 映射二级列表 使用类一级的 @SecondaryTable 和 @SecondaryTables 注解可以
实现
单个实体到多个表的映射。使用 @Column 或者 @JoinColumn 注解
中
的 table 参数可以指定某个列所属的特定表。 @Entity @Table(name="MainCat") @SecondaryTables({ @SecondaryTable(name="Cat1", pkJoinColumns={ @PrimaryKeyJoinColumn(name="cat_id", referencedColumnName="id")}), @SecondaryTable(name="Cat2", uniqueConstraints={ @UniqueConstraint(columnNames={"storyPart2"})}) }) public class Cat implements Serializable { private Integer id; private String name; private String storyPart1; private String storyPart2; @Id @GeneratedValue public Integer getId() { return id; } public String getName() { return name; } @Column(table="Cat1") public String getStoryPart1() { return storyPart1; } @Column(table="Cat2") public String getStoryPart2() { return storyPart2; } 上述例子
中
, name 保存在 MainCat 表
中
,storyPart1保存在 Cat1 表
中
,storyPart2 保存在 Cat2 表
中
。 Cat1 表通过外键 cat_id 和 MainCat 表关联, Cat2 表通过 id 列和 MainCat 表关联。对storyPart2 列还定义了唯一约束。 映射查询 使用注解可以映射
EJB
QL
/H
QL
查询,@NamedQuery 和 @NamedQueries 是可以使用在类级别或者JPA的XML文件
中
的注解。
select p from Plane p
...
... @Entity @NamedQuery(name="night.moreRecentThan", query="select n from Night n where n.date >= :date") public class Night { ... } public class MyDao { doStuff() { Query q = s.getNamedQuery("night.moreRecentThan"); q.setDate( "date", aMonthAgo ); List results = q.list(); ... } ... } 可以通过定义 QueryHint 数组的 hints 属性为查询提供一些 hint 信息。下图是一些 Hibernate hints: 映射本地化查询 通过@S
ql
ResultSetMapping 注解来描述 S
QL
的 resultset 结构。如果定义多个结果集映射,则用 @S
ql
ResultSetMappings。 @NamedNativeQuery(name="night&area", query="select night.id nid, night.night_duration, " + " night.night_date, area.id aid, night.area_id, area.name " + "from Night night, Area area where night.area_id = area.id", resultSetMapping="joinMapping") @S
ql
ResultSetMapping( name="joinMapping", entities={ @EntityResult(entityClass=org.hibernate.test.annotations.query.Night.class, fields = { @FieldResult(name="id", column="nid"), @FieldResult(name="duration", column="night_duration"), @FieldResult(name="date", column="night_date"), @FieldResult(name="area", column="area_id"), discriminatorColumn="disc" }), @EntityResult(entityClass=org.hibernate.test.annotations.query.Area.class, fields = { @FieldResult(name="id", column="aid"), @FieldResult(name="name", column="name") }) } ) 上面的例子,名为“night&area”的查询和 "joinMapping"结果集映射对应,该映射返回两个实体,分别为 Night 和 Area, 其
中
每个属性都和一个列关联,列名通过查询获取。 @Entity @S
ql
ResultSetMapping(name="implicit", entities=@EntityResult( entityClass=org.hibernate.test.annotations.@NamedNativeQuery( name="implicitSample", query="select * from SpaceShip", resultSetMapping="implicit") public class SpaceShip { private String name; private String model; private double speed; @Id public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name="model_txt") public String getModel() { return model; } public void setModel(String model) { this.model = model; } public double getSpeed() { return speed; } public void setSpeed(double speed) { this.speed = speed; } } 上例
中
model1 属性绑定到 model_txt 列,如果和相关实体关联设计到组合主键,那么应该使用 @FieldResult 注解来定义每个外键列。@FieldResult的名字组成:定义这种关系的属性名字 + "." + 主键名或主键列或主键属性。 @Entity @S
ql
ResultSetMapping(name="compositekey", entities=@EntityResult(entityClass=org.hibernate.test.annotations.query.SpaceShip.class, fields = { @FieldResult(name="name", column = "name"), @FieldResult(name="model", column = "model"), @FieldResult(name="speed", column = "speed"), @FieldResult(name="captain.firstname", column = "firstn"), @FieldResult(name="captain.lastname", column = "lastn"), @FieldResult(name="dimensions.length", column = "length"), @FieldResult(name="dimensions.width", column = "width") }), columns = { @ColumnResult(name = "surface"), @ColumnResult(name = "volume") } ) @NamedNativeQuery(name="compositekey", query="select name, model, speed, lname as lastn, fname as firstn, length, width, length * width as resultSetMapping="compositekey") }) 如果查询返回的是单个实体,或者打算用系统默认的映射,这种情况下可以不使用 resultSetMapping,而使用resultClass属性,例如: @NamedNativeQuery(name="implicitSample", query="select * from SpaceShip", resultClass=SpaceShip.class) public class SpaceShip { Hibernate 独有的注解扩展 Hibernate 提供了与其自身特性想吻合的注解,org.hibernate.annotations package包含了这些注解。 实体 org.hibernate.annotations.Entity 定义了 Hibernate 实体需要的信息。 • mutable: whether this entity is mutable or not 此实体是否可变 • dynamicInsert: allow dynamic S
QL
for inserts 用动态S
QL
新增 • dynamicUpdate: allow dynamic S
QL
for updates 用动态S
QL
更新 • selectBeforeUpdate: Specifies that Hibernate should never perform an S
QL
UPDATE unless it is certain that an object is actually modified.指明Hibernate从不运行S
QL
Update,除非能确定对象已经被修改 • polymorphism: whether the entity polymorphism is of PolymorphismType.IMPLICIT (default) or PolymorphismType.EXPLICIT 指出实体多态是 PolymorphismType.IMPLICIT(默认)还是PolymorphismType.EXPLICIT • optimisticLock: optimistic locking strategy (OptimisticLockType.VERSION, OptimisticLockType.NONE, OptimisticLockType.DIRTY or OptimisticLockType.ALL) 乐观锁策略 标识符 @org.hibernate.annotations.GenericGenerator和@org.hibernate.annotations.GenericGenerators允许你定义hibernate特有的标识符。 @Id @GeneratedValue(generator="system-uuid") @GenericGenerator(name="system-uuid", strategy = "uuid") public String getId() { @Id @GeneratedValue(generator="hibseq") @GenericGenerator(name="hibseq", strategy = "seqhilo", parameters = { @Parameter(name="max_lo", value = "5"), @Parameter(name="sequence", value="heybabyhey") } ) public Integer getId() { 新例子 @GenericGenerators( { @GenericGenerator( name="hibseq", strategy = "seqhilo", parameters = { @Parameter(name="max_lo", value = "5"), @Parameter(name="sequence", value="heybabyhey") } ), @GenericGenerator(...) } ) 自然ID 用 @NaturalId 注解标识 公式 让
数据库
而不是JVM进行计算。 @Formula("obj_length * obj_height * obj_width") public long getObjectVolume() 索引 通过在列属性(property)上使用@Index注解,可以指定特定列的索引,columnNames属性(attribute)将随之被忽略。 @Column(secondaryTable="Cat1") @Index(name="story1index") public String getStoryPart1() { return storyPart1; } 辨别符 @Entity @DiscriminatorFormula("case when forest_type is null then 0 else forest_type end") public class Forest { ... } 过滤 查询 ... • 其
中
一个实体通过外键关联到另一个实体的主键。注:一对一,则外键必须为唯一约束。 @Entity public class Customer implements Serializable { @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name="passport_fk") public Passport getPassport() { ... } @Entity public class Passport implements Serializable { @OneToOne(mappedBy = "passport") public Customer getOwner() { ... } 通过@JoinColumn注解定义一对一的关联关系。如果没有@JoinColumn注解,则系统自动处理,在主表
中
将创建连接列,列名为:主题的关联属性名 + 下划线 + 被关联端的主键列名。上例为 passport_id, 因为Customer
中
关联属性为 passport, Passport 的主键为 id. • 通过关联表来保存两个实体之间的关联关系。注:一对一,则关联表每个外键都必须是唯一约束。 @Entity public class Customer implements Serializable { @OneToOne(cascade = CascadeType.ALL) @JoinTable(name = "CustomerPassports", joinColumns = @JoinColumn(name="customer_fk"), inverseJoinColumns = @JoinColumn(name="passport_fk") ) public Passport getPassport() { ... } @Entity public class Passport implements Serializable { @OneToOne(mappedBy = "passport") public Customer getOwner() { ... } Customer 通过 CustomerPassports 关联表和 Passport 关联。该关联表通过 passport_fk 外键指向 Passport 表,该信心定义为 inverseJoinColumns 的属性值。 通过 customer_fk 外键指向 Customer 表,该信息定义为 joinColumns 属性值。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tangcx/archive/2009/05/05/4152320.aspx
EJB
3.0笔记-实体查询与
EJB
QL
在java persistence
中
,可以同时使用
EJB
QL
查询语言和原生的S
QL
来完成查询操作。由于
EJB
QL
是一种描述Java对象的查询语言,而entity manager会为你处理由
EJB
QL
向原生S
QL
转换的工作,因此它具有跨
数据库
厂商
实现
的移植能力。
EJB
QL
比S
QL
更加紧凑和更容易阅读,但是
EJB
QL
不可能都支持
数据库
所有私有特性,所以功能上没有厂商原生S
QL
那么功能全面。
JSP 基础实战精讲(大神必经之路)
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页
中
插入... JSP标签有多种功能,比如访问
数据库
、
记录
用户选择信息、访问JavaBeans组件等,还可以在不同的网页
中
传递控制信息和共享信息。
EJB
3.0笔记-9实体查询与
EJB
QL
转自:http://blog.sina.com.cn/s/blog_5016113a0
10
0asnl.html 在java persistence
中
,可以同时使用
EJB
QL
查询语言和原生的S
QL
来完成查询操作。由于
EJB
QL
是一种描述Java对象的查询语言,而entity manager会为你处理由
EJB
QL
向原生S
QL
转换的工作,因此它具有跨
数据库
厂商
实现
的移植能力。
EJB
QL
比SQ...
EJB
注解详细说明
本章内容覆盖了
EJB
3.0(也就是JPA)实体的注解规范以及hibernate特有的扩展. 现在
EJB
3实体Bean是纯粹的POJO.实际上这表达了和Hibernate持久化实体对象同样的概念. 它们的映射都通过JDK5.0注解来定义(
EJB
3规范已经定义了对应的XML描述语法). 注解分为两个部分,分别是逻辑映射注解和物理映射注解,通过逻辑映射注解可以描述对象模型,类之
Java EE
67,513
社区成员
225,879
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章