`
smiky
  • 浏览: 257729 次
  • 性别: Icon_minigender_1
  • 来自: 天门
社区版块
存档分类
最新评论

标记一下(hibernate update无主键表失败)

阅读更多

试验了一下,对无主键表更新不能成功,添加删除没问题

public class SsSysIpFilter implements Serializable
{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private SsSysIpFilterId id;

	public SsSysIpFilter(SsSysIpFilterId id)
	{
		super();
		this.id = id;
	}

	public SsSysIpFilter()
	{
		super();
	}

	public SsSysIpFilterId getId()
	{
		return id;
	}

	public void setId(SsSysIpFilterId id)
	{
		this.id = id;
	}
	
	
}

 public class SsSysIpFilterId implements Serializable

{
	
	/**
		 * 
		 */
	private static final long serialVersionUID = 1L;
	private String ipFrom;//IP段起始
	private String ipTo;//IP段结束
	private long ipFromNumber;//起始IP转成的数字
	private long ipToNumber;//结束IP转成的数字
	/**
	 * 转换规则
	 * 10.1.1.1
	 * 转:10*256*256*256+1*256*256+1*256+1
	 * 相关于转成256进制的数
	 */
	private boolean ipFilteType;//0为黑名单,1为白名单
	
	
	public SsSysIpFilterId(String ipFrom, String ipTo, long ipFromNumber,
			long ipToNumber, boolean ipFilteType)
	{
		super();
		this.ipFrom = ipFrom;
		this.ipTo = ipTo;
		this.ipFromNumber = ipFromNumber;
		this.ipToNumber = ipToNumber;
		this.ipFilteType = ipFilteType;
	}
	public SsSysIpFilterId()
	{
		super();
	}
	public String getIpFrom()
	{
		return ipFrom;
	}
	public void setIpFrom(String ipFrom)
	{
		this.ipFrom = ipFrom;
	}
	public String getIpTo()
	{
		return ipTo;
	}
	public void setIpTo(String ipTo)
	{
		this.ipTo = ipTo;
	}
	public long getIpFromNumber()
	{
		return ipFromNumber;
	}
	public void setIpFromNumber(long ipFromNumber)
	{
		this.ipFromNumber = ipFromNumber;
	}
	
	public long getIpToNumber()
	{
		return ipToNumber;
	}
	public void setIpToNumber(long ipToNumber)
	{
		this.ipToNumber = ipToNumber;
	}
	public boolean isIpFilteType()
	{
		return ipFilteType;
	}
	public void setIpFilteType(boolean ipFilteType)
	{
		this.ipFilteType = ipFilteType;
	}
	@Override
	public int hashCode()
	{
		final int prime = 31;
		int result = 1;
		result = prime * result + (ipFilteType ? 1231 : 1237);
		result = prime * result + ((ipFrom == null) ? 0 : ipFrom.hashCode());
		result = prime * result + (int) (ipFromNumber ^ (ipFromNumber >>> 32));
		result = prime * result + ((ipTo == null) ? 0 : ipTo.hashCode());
		result = prime * result + (int) (ipToNumber ^ (ipToNumber >>> 32));
		return result;
	}
	@Override
	public boolean equals(Object obj)
	{
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final SsSysIpFilterId other = (SsSysIpFilterId) obj;
		if (ipFilteType != other.ipFilteType)
			return false;
		if (ipFrom == null)
		{
			if (other.ipFrom != null)
				return false;
		} else if (!ipFrom.equals(other.ipFrom))
			return false;
		if (ipFromNumber != other.ipFromNumber)
			return false;
		if (ipTo == null)
		{
			if (other.ipTo != null)
				return false;
		} else if (!ipTo.equals(other.ipTo))
			return false;
		if (ipToNumber != other.ipToNumber)
			return false;
		return true;
	}
	
}
 

<hibernate-mapping>
    <class name="com.vixtel.model.SsSysIpFilter" table="SS_SYS_IP_FILTER">
        <composite-id name="id" class="com.vixtel.model.SsSysIpFilterId">
            <key-property name="ipFrom" type="java.lang.String">
                <column name="IP_FROM" precision="100" scale="0" />
            </key-property>
            <key-property name="ipTo" type="java.lang.String">
                <column name="IP_TO" precision="100" scale="0" />
            </key-property>
            <key-property name="ipFromNumber" type="java.lang.Long">
                <column name="IP_FROM_L" precision="10" scale="0" />
            </key-property>
            <key-property name="ipToNumber" type="java.lang.Long">
                <column name="IP_TO_L" precision="10" scale="0" />
            </key-property>
            <key-property name="ipFilteType" type="java.lang.Boolean">
                <column name="FILTER_TYPE" precision="1" scale="0" />
            </key-property>
        </composite-id>
    </class>
</hibernate-mapping>
 

应该是很标准的无主键表的配置了,担心其会调用equals方法来判断对象是否变化,就将它加上了,结果更新还是失败

SsSysIpFilter ssSysIpFilter = (SsSysIpFilter)list.get(0);

			SsSysIpFilterId id = ssSysIpFilter.getId();
			id.setIpFrom(new_ipFrom);
			id.setIpTo(new_ipTo);
			id.setIpFromNumber(new_ipFromNumber);
			id.setIpToNumber(new_ipToNumber);
			id.setIpFilteType(ipFilteType_new);
			hibernateTemplate.update(ssSysIpFilter);
 

只能看到select语句,根本看不到update语句出来,估计hibernate无法判断无主键表的信息是否发生了变化.

 

public void deleteSsSysIpFilter(String ipFrom ,String ipTo){
		List list = hibernateTemplate.find("from SsSysIpFilter s where s.id.ipFrom = '"+ipFrom+"' and s.id.ipTo ='"+ipTo+"'");
		if(list.size()>0){
			hibernateTemplate.delete((SsSysIpFilter)list.get(0));
		}
	}

public void addSsSysIpFilter(SsSysIpFilter ipFilter){
		hibernateTemplate.save(ipFilter);
	}

添加删除都没问题
 

 

分享到:
评论

相关推荐

    Hibernate初之单表映射学习例子

    3. **实体类设计**:讲解如何创建一个Java类作为数据库表的映射,包括使用`@Entity`注解标记实体类,`@Id`注解定义主键,以及其他字段的注解如`@Column`。 4. **XML映射文件**:解释Hibernate的Hibernate ...

    hibernate中创建表

    1. **创建实体类**:在Java中,定义一个实体类,比如`User.java`,并使用`@Entity`注解标记这个类为Hibernate管理的实体。例如: ```java import javax.persistence.Entity; import javax.persistence....

    hibernate aip hibernate aip

    2. **实体类与表映射**:使用@Entity注解标记Java类为实体类,并通过@Id指定主键。字段可以通过@Column注解映射到数据库表的列。 3. **SessionFactory的创建**:根据配置文件初始化SessionFactory,它是线程安全的...

    hibernate 重点知识原创

    `.hbm.xml` 文件是 Hibernate 的对象-关系映射文件,它定义了实体类和数据库表之间的详细映射规则,包括字段类型、长度、主键生成策略等。例如: ```xml &lt;hibernate-mapping package="com.example"&gt; ...

    Hibernate入门(代码+笔记)

    @Id用于标记主键字段,@GeneratedValue可以自动生成主键值。此外,@ManyToOne、@OneToMany、@OneToOne和@ManyToMany等注解用于处理关联关系。 **第四部分:Hibernate复合主键** 复合主键在数据库设计中并不罕见,...

    HIBERNATE - Relational Persistence for Idiomatic Java

    主键是数据库表中唯一标识一条记录的字段,对应到Java实体上,通常用`@Id`注解标记。Hibernate支持多种主键策略,如自增主键、联合主键等。 5. **持久化(Persistence)**: Hibernate提供了四种持久化操作:CRUD...

    hibernate框架实例

    2. **实体类(Entity)**:在Hibernate中,我们通过创建Java类来代表数据库中的表,并使用注解(如@Entity, @Table)来标记这个类为数据库实体。同时,类的属性对应于表的字段,使用@Column注解进行映射。 3. **...

    初学hibernate,hibernate入门

    3. **创建实体类**:定义一个Java类,代表数据库中的表,使用`@Entity`注解标记为实体类,字段对应表的列,用`@Id`指定主键。 4. **映射配置**:如果选择使用注解,直接在实体类上进行;若使用XML映射,创建对应的`...

    Hibernate4实战资料

    如name用于指定列名,unique用于设置唯一性约束,nullable定义是否允许空值,insertable和updatable控制列在INSERT和UPDATE语句中的行为,columnDefinition允许自定义SQL DDL片段,table指定对应表,length定义列...

    HIBERNATE:Hibernate 学习一--注解方式自动建表

    - `@Entity`:标记一个Java类为数据库中的一个实体表,相当于传统的Hibernate配置文件中的映射文件。 - `@Table`:用于指定实体类对应的数据库表名,可以设置其他如schema、catalog等属性。 - `@Id`:标识类的...

    自动在数据库中建成表(Hibernate)

    使用注解如`@Entity`声明这是一个数据库实体,`@Table`指定对应的表名,`@Column`标记类的属性为表的字段。 3. **属性映射**:在实体类的属性上添加`@Column`注解,指定列名、是否为主键、长度、是否允许为空等属性...

    hibernate源码release-4.1.4.Final版

    Hibernate通过@Entity注解标记Java类为数据库表的映射,@Table定义表名,@Id指定主键,@GeneratedValue管理主键生成策略。其他如@Column、@OneToMany、@ManyToOne等注解则用于定义字段映射关系。 四、缓存机制 ...

    java代码hibernate

    3. **实体类(Entity)**:在Hibernate中,实体类代表数据库表,其属性对应于表的列。每个实体类需要继承Hibernate的`Serializable`接口,并使用`@Entity`注解标记。 4. **主键(Primary Key)**:每个实体类通常有...

    hibernate annotation 中文文档

    Hibernate Annotation提供了一系列预定义的注解,如@Entity、@Table、@Id等,它们用于标记实体类、映射表以及主键。例如,`@Entity`表示该类为一个数据库实体,`@Table`指定对应的数据库表名,`@Id`则标识类中的...

    Hibernate DOC 中文文档

    通过@Entity注解标记Java类为实体类,@Table注解指定对应的数据库表,@Id注解标识主键,其他字段可以通过@Column注解进行字段映射。还可以使用@ManyToOne、@OneToMany、@OneToOne、@ManyToMany等注解定义关联关系。 ...

    Hibernate方法的实现

    Hibernate通过@Entity注解标记一个Java类为实体类,对应数据库中的一个表。类的属性与表的列建立映射,@Id注解标识主键,其他字段如@IdClass、@GeneratedValue等可以用来定义主键生成策略。 4. **会话工厂与会话**...

    Java+Persistence+with+Hibernate

    例如,使用`@Entity`注解标记一个Java类为实体,用`@Id`注解指定主键字段,`@Column`注解指定字段与数据库列的映射。 六、持久化操作 1. 保存(Save/Insert):通过Session的save()或persist()方法将新对象插入...

    hibernate映射继承关系(每个类都对应一张表)

    Hibernate,作为Java中广泛使用的对象关系映射(ORM)框架,提供了多种方式来处理继承关系的映射,其中一种就是"每个类都对应一张表"的策略。本文将深入探讨这种映射方式,以及如何在Hibernate中实现它。 首先,...

    hibernate立体结构文档

    1. 实体类:使用@Entity注解标记,@Table注解指定对应的数据库表。 2. 主键管理:@Id注解标识主键,可使用@GeneratedValue自动生成策略。 3. 属性映射:@Column注解映射字段,@ManyToOne、@OneToMany等处理关联关系...

    hibernate单表操作(视频)

    在单表操作中,我们需要创建一个代表数据库表的Java类,并使用`@Entity`注解标记它。同时,使用`@Table`注解指定对应的数据库表名。 接着,我们会在实体类中定义属性,每个属性对应表中的字段,通过`@Column`注解来...

Global site tag (gtag.js) - Google Analytics