Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate/SQL Server算术溢出将int转换为数据类型numeric时出错_Java_Sql_Sql Server_Hibernate - Fatal编程技术网

Java Hibernate/SQL Server算术溢出将int转换为数据类型numeric时出错

Java Hibernate/SQL Server算术溢出将int转换为数据类型numeric时出错,java,sql,sql-server,hibernate,Java,Sql,Sql Server,Hibernate,使用Java+Hibernate将MySQL数据库转换为SQL Server 2008数据库。遇到这个奇怪的错误消息 我知道这意味着某个地方的整数太大,无法放入它在SQL Server数据库上对应的数字(x,y),但我看不到任何地方是这样的 每当我试图向球员的统计数据中添加内容时,就会发生这种情况。下面是Player.java属性 @Entity(name = "player") public class Player { @Id @GeneratedValue(strategy = Gener

使用Java+Hibernate将MySQL数据库转换为SQL Server 2008数据库。遇到这个奇怪的错误消息

我知道这意味着某个地方的整数太大,无法放入它在SQL Server数据库上对应的数字(x,y),但我看不到任何地方是这样的

每当我试图向球员的统计数据中添加内容时,就会发生这种情况。下面是Player.java属性

@Entity(name = "player")
public class Player {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer playerId;

@ElementCollection
@CollectionTable(name = "playerposition", joinColumns = @JoinColumn(name = "playerid"))
@Column(name = "position")
@Fetch(FetchMode.JOIN)
Set<String> positions = new HashSet<String>();

@OneToMany(fetch = FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="player")
@Fetch(FetchMode.JOIN)
Set<PlayerSeason> seasons = new HashSet<PlayerSeason>();


@Column
String name;
@Column
String nickName;
@Column
Date birthDay;
@Column
Date deathDay;
@Column
String battingHand;
@Column
String throwingHand;
@Column
String birthCity;
@Column
String birthState;
@Column
String college;
@Column
Date firstGame;
@Column
Date lastGame;
@SuppressWarnings("serial")
@Entity(name = "playerseason")
public class PlayerSeason implements Serializable {

@Id
@ManyToOne
@JoinColumn(name = "playerid", referencedColumnName = "playerid", insertable = false, updatable = false)
public Player player;

@Id
@Column
public Integer year;

@Column
int gamesPlayed;
@Column
double salary;

@OneToOne(cascade=CascadeType.ALL, mappedBy="id")
BattingStats battingStats;
@OneToOne(cascade=CascadeType.ALL, mappedBy="id")
FieldingStats fieldingStats;
@OneToOne(cascade=CascadeType.ALL, mappedBy="id")
PitchingStats pitchingStats;
@OneToOne(cascade=CascadeType.ALL, mappedBy="id")
CatchingStats catchingStats;
@SuppressWarnings("serial")
@Entity(name="catchingstats")
public class CatchingStats implements Serializable{

@Id
@OneToOne
@JoinColumns({
    @JoinColumn(name="playerid"),
    @JoinColumn(name="year")
})
PlayerSeason id;

@Column
Integer passedBalls;
@Column
Integer wildPitches;
@Column
Integer stealsAllowed;
@Column
Integer stealsCaught;
下面是CatchingStats.java属性

@Entity(name = "player")
public class Player {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer playerId;

@ElementCollection
@CollectionTable(name = "playerposition", joinColumns = @JoinColumn(name = "playerid"))
@Column(name = "position")
@Fetch(FetchMode.JOIN)
Set<String> positions = new HashSet<String>();

@OneToMany(fetch = FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="player")
@Fetch(FetchMode.JOIN)
Set<PlayerSeason> seasons = new HashSet<PlayerSeason>();


@Column
String name;
@Column
String nickName;
@Column
Date birthDay;
@Column
Date deathDay;
@Column
String battingHand;
@Column
String throwingHand;
@Column
String birthCity;
@Column
String birthState;
@Column
String college;
@Column
Date firstGame;
@Column
Date lastGame;
@SuppressWarnings("serial")
@Entity(name = "playerseason")
public class PlayerSeason implements Serializable {

@Id
@ManyToOne
@JoinColumn(name = "playerid", referencedColumnName = "playerid", insertable = false, updatable = false)
public Player player;

@Id
@Column
public Integer year;

@Column
int gamesPlayed;
@Column
double salary;

@OneToOne(cascade=CascadeType.ALL, mappedBy="id")
BattingStats battingStats;
@OneToOne(cascade=CascadeType.ALL, mappedBy="id")
FieldingStats fieldingStats;
@OneToOne(cascade=CascadeType.ALL, mappedBy="id")
PitchingStats pitchingStats;
@OneToOne(cascade=CascadeType.ALL, mappedBy="id")
CatchingStats catchingStats;
@SuppressWarnings("serial")
@Entity(name="catchingstats")
public class CatchingStats implements Serializable{

@Id
@OneToOne
@JoinColumns({
    @JoinColumn(name="playerid"),
    @JoinColumn(name="year")
})
PlayerSeason id;

@Column
Integer passedBalls;
@Column
Integer wildPitches;
@Column
Integer stealsAllowed;
@Column
Integer stealsCaught;
我95%确信问题在于统计数据,因为当我不在球员的赛季“赛季”集合中添加任何东西时,它就起作用了。但是,只要我尝试添加任何统计数据(捕捉、命中或其他),它就会抛出异常,并且Hibernate不会持久化播放器

有人能发现这个问题吗

-----编辑-----
这是数据库的ddl

create table player (
playerId        numeric(10,0)   IDENTITY(10000,5) primary key,
name            varchar(100)        not null,
nickName        varchar(255),
birthDay        date,
deathDay        date,
battingHand     varchar(1)      check (battingHand in ('L', 'R', 'S')),
throwingHand    varchar(1)      check (throwingHand in ('L', 'R')),
birthCity       varchar(50),
birthState      varchar(2),
college         varchar(50),
firstGame       date,
lastGame        date,
CONSTRAINT uniqueConstraint_Player UNIQUE (name, birthDay, deathDay));

create table playerposition (
playerId        numeric(10,0),
position        varchar(10),
primary key(playerId, position),
foreign key(playerId) references player on delete cascade);

create table playerseason (
playerId        numeric(10,0)   references player on delete cascade,
year            numeric(4,0),
gamesPlayed     numeric(3,0),
salary          numeric(12,2),
primary key (playerId, year));

create table battingstats (
playerId        numeric(10,0),
year            numeric(4,0),
atBats          numeric(4,0),
hits            numeric(4,0),
doubles         numeric(4,0),
triples         numeric(4,0),
homeRuns        numeric(4,0),
runsBattedIn    numeric(4,0),
strikeouts      numeric(4,0),
walks           numeric(4,0),
hitByPitch      numeric(4,0),
intentionalWalks        numeric(4,0),
steals          numeric(4,0),
stealsAttempted numeric(4,0),
primary key(playerId, year),
foreign key(playerId, year) references playerseason on delete cascade);

create table catchingstats (
playerId        numeric(10,0),
year            numeric(4,0),
passedBalls     numeric(4,0),
wildPitches     numeric(4,0),
stealsAllowed   numeric(4,0),
stealsCaught    numeric(4,0),
primary key(playerId, year),
foreign key(playerId, year) references playerseason on delete cascade);

create table fieldingstats (
playerId        numeric(10,0),
year            numeric(4,0),
errors          numeric(4,0),
putOuts         numeric(4,0),
primary key(playerId, year),
foreign key(playerId, year) references playerseason on delete cascade);

create table pitchingstats (
playerId        numeric(10,0),
year            numeric(4,0),
outsPitched     numeric(4,0),
earnedRunsAllowed   numeric(4,0),
homeRunsAllowed     numeric(4,0),
strikeouts      numeric(4,0),
walks           numeric(4,0),
wins            numeric(4,0),
losses          numeric(4,0),
wildPitches     numeric(4,0),
battersFaced    numeric(4,0),
hitBatters      numeric(4,0),
saves           numeric(4,0),
primary key(playerId, year),
foreign key(playerId, year) references playerseason on delete cascade); 

create table team (
teamId          varchar(3),
otherId         varchar(3),
name            varchar(50),
league          varchar(2),
yearFounded     numeric(4,0),
yearLast        numeric(4,0),
primary key(teamId));   

create table teamseason (
teamId          varchar(3),
year            numeric(4,0),
gamesPlayed     int,
wins            int  check (wins >= 0),
losses          int check (losses >= 0),
rank            int,
totalAttendance int,
primary key(teamId, year),
foreign key(teamId) references team);

create table teamseasonplayer (
teamId          varchar(3),
year            numeric(4,0),
playerId        numeric(10,0),
primary key(teamId,year,playerId),
foreign key (teamId) references team,
foreign key (playerId) references player);
-----编辑-----
这是Eclipse打印的堆栈跟踪

2014年4月30日下午2:19:58 org.hibernate.engine.jdbc.spi.SqlExceptionHelper日志异常
警告:SQL错误:8115,SQLState:S0008
2014年4月30日下午2:19:58 org.hibernate.engine.jdbc.spi.SqlExceptionHelper日志异常
错误:将int转换为数据类型numeric时出现算术溢出错误。
2014年4月30日下午2:19:58 org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl发布
信息:HH000010:在批处理发布时,它仍然包含JDBC语句
org.hibernate.exception.sqlgrammareexception:无法执行语句
位于org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
位于org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
位于org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
位于org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
位于org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190)
位于org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62)
位于org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3124)
位于org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3581)
位于org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:103)
位于org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:461)
位于org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:347)
位于org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
位于org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
位于org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
位于org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
位于org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
位于org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
位于dataaccesslayer.HibernateUtil.persistPlayer(HibernateUtil.java:131)
Convert.convertPlayer(Convert.java:116)
位于conversion.Convert.main(Convert.java:30)
原因:com.microsoft.sqlserver.jdbc.SQLServerException:将int转换为数据类型numeric时出现算术溢出错误。
位于com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
位于com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)
位于com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)
位于com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
位于com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
位于com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
位于com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:314)
位于org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187)

... 15更多

请发布stacktrace。您可以尝试使用,以便在错误发生时查看包含参数的语句。可能是Hibernate正在验证数据类型,而不是实际值。您为统计信息定义的许多列都是数字(4,0),因此Hibernate可能会抱怨此数据类型不够大,无法存储整数。您是否尝试过增加这些数据类型的大小?