基本属性java.sql.Blob的问题

时间:2009-07-20 14:07:12

标签: java hibernate

我有这段代码

@Entity
@Table(name = "picture")
public class Picture implements Serializable {
    @Id
    @Column(name = "id")
    @GeneratedValue
    private int id;
    @Column(name = "format", length = 8)
    private String format;

    @Basic(fetch = FetchType.LAZY)
    @Column(name = "context", nullable = true, columnDefinition="mediumblob")
    @Lob
    private java.sql.Blob myBlobAttribute; // protected accessor and modifier

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "branch_fk", referencedColumnName = "id", nullable = false)
    private Branch branch;
//Some setter and getter

我使用netbeans 6.7并在此Ide中显示我在行(private java.sql.Blob myBlobAttribute;)上的错误 但代码运行,它在我的数据库上制作图片表! 这是一个真正的错误还是只是e通知,我该如何解决? 错误信息是:

basic attributes can only be of the following types: java primitive types,wrapper of primitive types, String, java.math.bigInteger, java.math.BigDecimal, java,util.Date, java.util.Calendar, java.sql.Data, java.sql.TimeStamp, byte[], Byte[], char[], Character[], enums, or any Serializable type

3 个答案:

答案 0 :(得分:2)

NetBeans生成此警告的原因是,在使用java.sql.Blob时,您应该只使用@Lob注释而不是@Basic。

然而,在运行时,听起来你的JPA实现通过忽略@Basic注释并且识别该列实际上是LOB来“帮助你”。这就是您的代码有效的原因。不同的JPA实现可能会失败或以某种方式表现不同。

答案 1 :(得分:1)

您的媒体资源类型为java.sql.Blob,这是一个界面 首先,为什么?它不应该是一个字节数组(可能是你存储图像的地方)? 其次,这就是NetBeans抱怨的原因 - 一旦你尝试从这个表中读取东西,Hibernate也会这样 - 他们无法知道要在你的领域中创建数据的实际类型。

答案 2 :(得分:0)

问题是否在线之前?

@Lob

可能是@Blob吗?